diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index b6e913d..1a8331a 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -3,21 +3,21 @@ import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; +import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import androidx.core.content.ContextCompat; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; -import com.casic.dcms.base.BaseActivity; import com.luck.picture.lib.photoview.PhotoView; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; import org.jetbrains.annotations.NotNull; @@ -25,36 +25,26 @@ import java.util.List; import butterknife.BindView; +import butterknife.ButterKnife; -public class BigImageActivity extends BaseActivity { +public class BigImageActivity extends AppCompatActivity { - @BindView(R.id.topLayout) - QMUITopBarLayout topLayout; @BindView(R.id.imagePagerView) ViewPager imagePagerView; @BindView(R.id.pageNumberView) TextView pageNumberView; @Override - protected void setupTopBarLayout() { - topLayout.setTitle("查看大图").setTextColor(ContextCompat.getColor(this, R.color.white)); - topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - } + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_big_image); + ButterKnife.bind(this); - @Override - public int initLayoutView() { - return R.layout.activity_big_image; + initEvent(); } @SuppressLint("SetTextI18n") - @Override - public void initData() { + private void initEvent() { int index = getIntent().getIntExtra("index", 0); ArrayList urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index b6e913d..1a8331a 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -3,21 +3,21 @@ import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; +import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import androidx.core.content.ContextCompat; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; -import com.casic.dcms.base.BaseActivity; import com.luck.picture.lib.photoview.PhotoView; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; import org.jetbrains.annotations.NotNull; @@ -25,36 +25,26 @@ import java.util.List; import butterknife.BindView; +import butterknife.ButterKnife; -public class BigImageActivity extends BaseActivity { +public class BigImageActivity extends AppCompatActivity { - @BindView(R.id.topLayout) - QMUITopBarLayout topLayout; @BindView(R.id.imagePagerView) ViewPager imagePagerView; @BindView(R.id.pageNumberView) TextView pageNumberView; @Override - protected void setupTopBarLayout() { - topLayout.setTitle("查看大图").setTextColor(ContextCompat.getColor(this, R.color.white)); - topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - } + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_big_image); + ButterKnife.bind(this); - @Override - public int initLayoutView() { - return R.layout.activity_big_image; + initEvent(); } @SuppressLint("SetTextI18n") - @Override - public void initData() { + private void initEvent() { int index = getIntent().getIntExtra("index", 0); ArrayList urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java index d4f61b1..a3b11d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -236,9 +239,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index b6e913d..1a8331a 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -3,21 +3,21 @@ import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; +import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import androidx.core.content.ContextCompat; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; -import com.casic.dcms.base.BaseActivity; import com.luck.picture.lib.photoview.PhotoView; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; import org.jetbrains.annotations.NotNull; @@ -25,36 +25,26 @@ import java.util.List; import butterknife.BindView; +import butterknife.ButterKnife; -public class BigImageActivity extends BaseActivity { +public class BigImageActivity extends AppCompatActivity { - @BindView(R.id.topLayout) - QMUITopBarLayout topLayout; @BindView(R.id.imagePagerView) ViewPager imagePagerView; @BindView(R.id.pageNumberView) TextView pageNumberView; @Override - protected void setupTopBarLayout() { - topLayout.setTitle("查看大图").setTextColor(ContextCompat.getColor(this, R.color.white)); - topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - } + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_big_image); + ButterKnife.bind(this); - @Override - public int initLayoutView() { - return R.layout.activity_big_image; + initEvent(); } @SuppressLint("SetTextI18n") - @Override - public void initData() { + private void initEvent() { int index = getIntent().getIntExtra("index", 0); ArrayList urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java index d4f61b1..a3b11d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -236,9 +239,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java index 2b65bb8..339e71f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -63,6 +64,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,18 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + //开始播放动画 + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + //结束播放动画 + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index b6e913d..1a8331a 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -3,21 +3,21 @@ import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; +import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import androidx.core.content.ContextCompat; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; -import com.casic.dcms.base.BaseActivity; import com.luck.picture.lib.photoview.PhotoView; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; import org.jetbrains.annotations.NotNull; @@ -25,36 +25,26 @@ import java.util.List; import butterknife.BindView; +import butterknife.ButterKnife; -public class BigImageActivity extends BaseActivity { +public class BigImageActivity extends AppCompatActivity { - @BindView(R.id.topLayout) - QMUITopBarLayout topLayout; @BindView(R.id.imagePagerView) ViewPager imagePagerView; @BindView(R.id.pageNumberView) TextView pageNumberView; @Override - protected void setupTopBarLayout() { - topLayout.setTitle("查看大图").setTextColor(ContextCompat.getColor(this, R.color.white)); - topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - } + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_big_image); + ButterKnife.bind(this); - @Override - public int initLayoutView() { - return R.layout.activity_big_image; + initEvent(); } @SuppressLint("SetTextI18n") - @Override - public void initData() { + private void initEvent() { int index = getIntent().getIntExtra("index", 0); ArrayList urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java index d4f61b1..a3b11d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -236,9 +239,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java index 2b65bb8..339e71f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -63,6 +64,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,18 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + //开始播放动画 + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + //结束播放动画 + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index da63f04..951b765 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -43,6 +43,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -99,6 +100,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -218,9 +221,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index b6e913d..1a8331a 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -3,21 +3,21 @@ import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; +import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import androidx.core.content.ContextCompat; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; -import com.casic.dcms.base.BaseActivity; import com.luck.picture.lib.photoview.PhotoView; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; import org.jetbrains.annotations.NotNull; @@ -25,36 +25,26 @@ import java.util.List; import butterknife.BindView; +import butterknife.ButterKnife; -public class BigImageActivity extends BaseActivity { +public class BigImageActivity extends AppCompatActivity { - @BindView(R.id.topLayout) - QMUITopBarLayout topLayout; @BindView(R.id.imagePagerView) ViewPager imagePagerView; @BindView(R.id.pageNumberView) TextView pageNumberView; @Override - protected void setupTopBarLayout() { - topLayout.setTitle("查看大图").setTextColor(ContextCompat.getColor(this, R.color.white)); - topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - } + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_big_image); + ButterKnife.bind(this); - @Override - public int initLayoutView() { - return R.layout.activity_big_image; + initEvent(); } @SuppressLint("SetTextI18n") - @Override - public void initData() { + private void initEvent() { int index = getIntent().getIntExtra("index", 0); ArrayList urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java index d4f61b1..a3b11d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -236,9 +239,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java index 2b65bb8..339e71f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -63,6 +64,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,18 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + //开始播放动画 + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + //结束播放动画 + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index da63f04..951b765 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -43,6 +43,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -99,6 +100,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -218,9 +221,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java index 443bcc5..a5be957 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -180,9 +183,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index b6e913d..1a8331a 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -3,21 +3,21 @@ import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; +import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import androidx.core.content.ContextCompat; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; -import com.casic.dcms.base.BaseActivity; import com.luck.picture.lib.photoview.PhotoView; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; import org.jetbrains.annotations.NotNull; @@ -25,36 +25,26 @@ import java.util.List; import butterknife.BindView; +import butterknife.ButterKnife; -public class BigImageActivity extends BaseActivity { +public class BigImageActivity extends AppCompatActivity { - @BindView(R.id.topLayout) - QMUITopBarLayout topLayout; @BindView(R.id.imagePagerView) ViewPager imagePagerView; @BindView(R.id.pageNumberView) TextView pageNumberView; @Override - protected void setupTopBarLayout() { - topLayout.setTitle("查看大图").setTextColor(ContextCompat.getColor(this, R.color.white)); - topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - } + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_big_image); + ButterKnife.bind(this); - @Override - public int initLayoutView() { - return R.layout.activity_big_image; + initEvent(); } @SuppressLint("SetTextI18n") - @Override - public void initData() { + private void initEvent() { int index = getIntent().getIntExtra("index", 0); ArrayList urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java index d4f61b1..a3b11d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -236,9 +239,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java index 2b65bb8..339e71f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -63,6 +64,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,18 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + //开始播放动画 + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + //结束播放动画 + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index da63f04..951b765 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -43,6 +43,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -99,6 +100,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -218,9 +221,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java index 443bcc5..a5be957 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -180,9 +183,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index 2bf82a6..ff4eef3 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -32,6 +32,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -61,6 +62,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index b6e913d..1a8331a 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -3,21 +3,21 @@ import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; +import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import androidx.core.content.ContextCompat; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; -import com.casic.dcms.base.BaseActivity; import com.luck.picture.lib.photoview.PhotoView; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; import org.jetbrains.annotations.NotNull; @@ -25,36 +25,26 @@ import java.util.List; import butterknife.BindView; +import butterknife.ButterKnife; -public class BigImageActivity extends BaseActivity { +public class BigImageActivity extends AppCompatActivity { - @BindView(R.id.topLayout) - QMUITopBarLayout topLayout; @BindView(R.id.imagePagerView) ViewPager imagePagerView; @BindView(R.id.pageNumberView) TextView pageNumberView; @Override - protected void setupTopBarLayout() { - topLayout.setTitle("查看大图").setTextColor(ContextCompat.getColor(this, R.color.white)); - topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - } + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_big_image); + ButterKnife.bind(this); - @Override - public int initLayoutView() { - return R.layout.activity_big_image; + initEvent(); } @SuppressLint("SetTextI18n") - @Override - public void initData() { + private void initEvent() { int index = getIntent().getIntExtra("index", 0); ArrayList urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java index d4f61b1..a3b11d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -236,9 +239,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java index 2b65bb8..339e71f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -63,6 +64,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,18 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + //开始播放动画 + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + //结束播放动画 + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index da63f04..951b765 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -43,6 +43,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -99,6 +100,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -218,9 +221,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java index 443bcc5..a5be957 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -180,9 +183,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index 2bf82a6..ff4eef3 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -32,6 +32,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -61,6 +62,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java index 5e8eee6..a4dae85 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -156,9 +159,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index b6e913d..1a8331a 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -3,21 +3,21 @@ import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; +import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import androidx.core.content.ContextCompat; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; -import com.casic.dcms.base.BaseActivity; import com.luck.picture.lib.photoview.PhotoView; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; import org.jetbrains.annotations.NotNull; @@ -25,36 +25,26 @@ import java.util.List; import butterknife.BindView; +import butterknife.ButterKnife; -public class BigImageActivity extends BaseActivity { +public class BigImageActivity extends AppCompatActivity { - @BindView(R.id.topLayout) - QMUITopBarLayout topLayout; @BindView(R.id.imagePagerView) ViewPager imagePagerView; @BindView(R.id.pageNumberView) TextView pageNumberView; @Override - protected void setupTopBarLayout() { - topLayout.setTitle("查看大图").setTextColor(ContextCompat.getColor(this, R.color.white)); - topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - } + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_big_image); + ButterKnife.bind(this); - @Override - public int initLayoutView() { - return R.layout.activity_big_image; + initEvent(); } @SuppressLint("SetTextI18n") - @Override - public void initData() { + private void initEvent() { int index = getIntent().getIntExtra("index", 0); ArrayList urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java index d4f61b1..a3b11d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -236,9 +239,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java index 2b65bb8..339e71f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -63,6 +64,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,18 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + //开始播放动画 + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + //结束播放动画 + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index da63f04..951b765 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -43,6 +43,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -99,6 +100,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -218,9 +221,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java index 443bcc5..a5be957 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -180,9 +183,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index 2bf82a6..ff4eef3 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -32,6 +32,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -61,6 +62,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java index 5e8eee6..a4dae85 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -156,9 +159,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index cf3e900..27d3a6f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -51,6 +51,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.iceteck.silicompressorr.SiliCompressor; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -110,6 +111,8 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -546,9 +549,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } } diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index b6e913d..1a8331a 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -3,21 +3,21 @@ import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; +import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import androidx.core.content.ContextCompat; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; -import com.casic.dcms.base.BaseActivity; import com.luck.picture.lib.photoview.PhotoView; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; import org.jetbrains.annotations.NotNull; @@ -25,36 +25,26 @@ import java.util.List; import butterknife.BindView; +import butterknife.ButterKnife; -public class BigImageActivity extends BaseActivity { +public class BigImageActivity extends AppCompatActivity { - @BindView(R.id.topLayout) - QMUITopBarLayout topLayout; @BindView(R.id.imagePagerView) ViewPager imagePagerView; @BindView(R.id.pageNumberView) TextView pageNumberView; @Override - protected void setupTopBarLayout() { - topLayout.setTitle("查看大图").setTextColor(ContextCompat.getColor(this, R.color.white)); - topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - } + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_big_image); + ButterKnife.bind(this); - @Override - public int initLayoutView() { - return R.layout.activity_big_image; + initEvent(); } @SuppressLint("SetTextI18n") - @Override - public void initData() { + private void initEvent() { int index = getIntent().getIntExtra("index", 0); ArrayList urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java index d4f61b1..a3b11d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -236,9 +239,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java index 2b65bb8..339e71f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -63,6 +64,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,18 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + //开始播放动画 + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + //结束播放动画 + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index da63f04..951b765 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -43,6 +43,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -99,6 +100,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -218,9 +221,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java index 443bcc5..a5be957 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -180,9 +183,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index 2bf82a6..ff4eef3 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -32,6 +32,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -61,6 +62,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java index 5e8eee6..a4dae85 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -156,9 +159,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index cf3e900..27d3a6f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -51,6 +51,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.iceteck.silicompressorr.SiliCompressor; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -110,6 +111,8 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -546,9 +549,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java index 926aecb..e27a310 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -159,9 +162,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index b6e913d..1a8331a 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -3,21 +3,21 @@ import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; +import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import androidx.core.content.ContextCompat; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; -import com.casic.dcms.base.BaseActivity; import com.luck.picture.lib.photoview.PhotoView; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; import org.jetbrains.annotations.NotNull; @@ -25,36 +25,26 @@ import java.util.List; import butterknife.BindView; +import butterknife.ButterKnife; -public class BigImageActivity extends BaseActivity { +public class BigImageActivity extends AppCompatActivity { - @BindView(R.id.topLayout) - QMUITopBarLayout topLayout; @BindView(R.id.imagePagerView) ViewPager imagePagerView; @BindView(R.id.pageNumberView) TextView pageNumberView; @Override - protected void setupTopBarLayout() { - topLayout.setTitle("查看大图").setTextColor(ContextCompat.getColor(this, R.color.white)); - topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - } + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_big_image); + ButterKnife.bind(this); - @Override - public int initLayoutView() { - return R.layout.activity_big_image; + initEvent(); } @SuppressLint("SetTextI18n") - @Override - public void initData() { + private void initEvent() { int index = getIntent().getIntExtra("index", 0); ArrayList urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java index d4f61b1..a3b11d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -236,9 +239,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java index 2b65bb8..339e71f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -63,6 +64,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,18 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + //开始播放动画 + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + //结束播放动画 + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index da63f04..951b765 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -43,6 +43,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -99,6 +100,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -218,9 +221,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java index 443bcc5..a5be957 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -180,9 +183,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index 2bf82a6..ff4eef3 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -32,6 +32,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -61,6 +62,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java index 5e8eee6..a4dae85 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -156,9 +159,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index cf3e900..27d3a6f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -51,6 +51,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.iceteck.silicompressorr.SiliCompressor; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -110,6 +111,8 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -546,9 +549,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java index 926aecb..e27a310 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -159,9 +162,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 509d0be..396c7fb 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -47,6 +47,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -103,6 +104,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -265,9 +268,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index b6e913d..1a8331a 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -3,21 +3,21 @@ import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; +import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import androidx.core.content.ContextCompat; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; -import com.casic.dcms.base.BaseActivity; import com.luck.picture.lib.photoview.PhotoView; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; import org.jetbrains.annotations.NotNull; @@ -25,36 +25,26 @@ import java.util.List; import butterknife.BindView; +import butterknife.ButterKnife; -public class BigImageActivity extends BaseActivity { +public class BigImageActivity extends AppCompatActivity { - @BindView(R.id.topLayout) - QMUITopBarLayout topLayout; @BindView(R.id.imagePagerView) ViewPager imagePagerView; @BindView(R.id.pageNumberView) TextView pageNumberView; @Override - protected void setupTopBarLayout() { - topLayout.setTitle("查看大图").setTextColor(ContextCompat.getColor(this, R.color.white)); - topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - } + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_big_image); + ButterKnife.bind(this); - @Override - public int initLayoutView() { - return R.layout.activity_big_image; + initEvent(); } @SuppressLint("SetTextI18n") - @Override - public void initData() { + private void initEvent() { int index = getIntent().getIntExtra("index", 0); ArrayList urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java index d4f61b1..a3b11d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -236,9 +239,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java index 2b65bb8..339e71f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -63,6 +64,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,18 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + //开始播放动画 + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + //结束播放动画 + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index da63f04..951b765 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -43,6 +43,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -99,6 +100,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -218,9 +221,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java index 443bcc5..a5be957 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -180,9 +183,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index 2bf82a6..ff4eef3 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -32,6 +32,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -61,6 +62,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java index 5e8eee6..a4dae85 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -156,9 +159,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index cf3e900..27d3a6f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -51,6 +51,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.iceteck.silicompressorr.SiliCompressor; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -110,6 +111,8 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -546,9 +549,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java index 926aecb..e27a310 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -159,9 +162,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 509d0be..396c7fb 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -47,6 +47,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -103,6 +104,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -265,9 +268,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java new file mode 100644 index 0000000..cedc830 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java @@ -0,0 +1,160 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.os.Handler; +import android.util.AttributeSet; +import android.view.View; + +import androidx.annotation.Nullable; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class VoicePlayView extends View { + + private static final String TAG = "VoicePlayView"; + private Paint paint; + //跳动指针的集合 + private List pointers = new ArrayList<>(); + private boolean isPlaying = false; + private Thread playThread; + private float basePointY; + //指针间的间隙 默认5dp + private float pointerPadding = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 3); + //每个指针的宽度 默认3dp + private float pointerWidth = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 5); + + public VoicePlayView(Context context) { + this(context, null); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initConfig(context, attrs); + } + + private void initConfig(Context context, AttributeSet attrs) { + TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.VoicePlayView); + int color = typedArray.getColor(R.styleable.VoicePlayView_indicatorColor, Color.RED); + int indicatorNumber = typedArray.getInt(R.styleable.VoicePlayView_indicatorNumber, 10); + + paint = new Paint(); + paint.setAntiAlias(true); + paint.setColor(color); + + typedArray.recycle(); + + Random random = new Random(); + if (pointers != null) { + pointers.clear(); + } + for (int i = 0; i < indicatorNumber; i++) { + //创建指针对象,利用0~1的随机数 乘以 可绘制区域的高度。作为每个指针的初始高度。 + pointers.add(new Pointer((float) (0.1 * (random.nextInt(10) + 1) * (getHeight() - getPaddingBottom() - getPaddingTop())))); + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + //获取逻辑原点的,也就是画布左下角的坐标。这里减去了paddingBottom的距离 + basePointY = getHeight() - getPaddingBottom(); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //将x坐标移动到逻辑原点,也就是左下角 + float basePointX = 0f + getPaddingLeft(); + for (int i = 0; i < pointers.size(); i++) { + //绘制指针,也就是绘制矩形 + canvas.drawRect(basePointX, + basePointY - pointers.get(i).getHeight(), + basePointX + pointerWidth, + basePointY, + paint); + basePointX += (pointerPadding + pointerWidth); + } + } + + /** + * 开始播放 + */ + public void start() { + if (!isPlaying) { + if (playThread == null) {//开启子线程 + playThread = new Thread(new PlayRunnable()); + playThread.start(); + } + isPlaying = true;//控制子线程中的循环 + } + } + + /** + * 停止子线程,并刷新画布 + */ + public void stop() { + isPlaying = false; + invalidate(); + } + + /** + * 处理子线程发出来的指令,然后刷新布局 + */ + private Handler invalidateHandler = new Handler(msg -> { + invalidate(); + return false; + }); + + public class PlayRunnable implements Runnable { + + @Override + public void run() { + for (float i = 0; i < Integer.MAX_VALUE; ) {//创建一个死循环,每循环一次i+0.1 + try { + for (int j = 0; j < pointers.size(); j++) { //循环改变每个指针高度 + float rate = (float) Math.abs(Math.sin(i + j));//利用正弦有规律的获取0~1的数。 + pointers.get(j).setHeight((basePointY - getPaddingTop()) * rate); //rate 乘以 可绘制高度,来改变每个指针的高度 + } + Thread.sleep(40); + if (isPlaying) { //控制开始/暂停 + invalidateHandler.sendEmptyMessage(0); + i += 0.1; + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + + private static class Pointer { + private float height; + + Pointer(float height) { + this.height = height; + } + + public float getHeight() { + return height; + } + + public void setHeight(float height) { + this.height = height; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index b6e913d..1a8331a 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -3,21 +3,21 @@ import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; +import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import androidx.core.content.ContextCompat; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; -import com.casic.dcms.base.BaseActivity; import com.luck.picture.lib.photoview.PhotoView; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; import org.jetbrains.annotations.NotNull; @@ -25,36 +25,26 @@ import java.util.List; import butterknife.BindView; +import butterknife.ButterKnife; -public class BigImageActivity extends BaseActivity { +public class BigImageActivity extends AppCompatActivity { - @BindView(R.id.topLayout) - QMUITopBarLayout topLayout; @BindView(R.id.imagePagerView) ViewPager imagePagerView; @BindView(R.id.pageNumberView) TextView pageNumberView; @Override - protected void setupTopBarLayout() { - topLayout.setTitle("查看大图").setTextColor(ContextCompat.getColor(this, R.color.white)); - topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - } + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_big_image); + ButterKnife.bind(this); - @Override - public int initLayoutView() { - return R.layout.activity_big_image; + initEvent(); } @SuppressLint("SetTextI18n") - @Override - public void initData() { + private void initEvent() { int index = getIntent().getIntExtra("index", 0); ArrayList urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java index d4f61b1..a3b11d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -236,9 +239,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java index 2b65bb8..339e71f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -63,6 +64,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,18 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + //开始播放动画 + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + //结束播放动画 + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index da63f04..951b765 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -43,6 +43,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -99,6 +100,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -218,9 +221,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java index 443bcc5..a5be957 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -180,9 +183,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index 2bf82a6..ff4eef3 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -32,6 +32,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -61,6 +62,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java index 5e8eee6..a4dae85 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -156,9 +159,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index cf3e900..27d3a6f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -51,6 +51,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.iceteck.silicompressorr.SiliCompressor; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -110,6 +111,8 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -546,9 +549,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java index 926aecb..e27a310 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -159,9 +162,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 509d0be..396c7fb 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -47,6 +47,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -103,6 +104,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -265,9 +268,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java new file mode 100644 index 0000000..cedc830 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java @@ -0,0 +1,160 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.os.Handler; +import android.util.AttributeSet; +import android.view.View; + +import androidx.annotation.Nullable; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class VoicePlayView extends View { + + private static final String TAG = "VoicePlayView"; + private Paint paint; + //跳动指针的集合 + private List pointers = new ArrayList<>(); + private boolean isPlaying = false; + private Thread playThread; + private float basePointY; + //指针间的间隙 默认5dp + private float pointerPadding = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 3); + //每个指针的宽度 默认3dp + private float pointerWidth = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 5); + + public VoicePlayView(Context context) { + this(context, null); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initConfig(context, attrs); + } + + private void initConfig(Context context, AttributeSet attrs) { + TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.VoicePlayView); + int color = typedArray.getColor(R.styleable.VoicePlayView_indicatorColor, Color.RED); + int indicatorNumber = typedArray.getInt(R.styleable.VoicePlayView_indicatorNumber, 10); + + paint = new Paint(); + paint.setAntiAlias(true); + paint.setColor(color); + + typedArray.recycle(); + + Random random = new Random(); + if (pointers != null) { + pointers.clear(); + } + for (int i = 0; i < indicatorNumber; i++) { + //创建指针对象,利用0~1的随机数 乘以 可绘制区域的高度。作为每个指针的初始高度。 + pointers.add(new Pointer((float) (0.1 * (random.nextInt(10) + 1) * (getHeight() - getPaddingBottom() - getPaddingTop())))); + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + //获取逻辑原点的,也就是画布左下角的坐标。这里减去了paddingBottom的距离 + basePointY = getHeight() - getPaddingBottom(); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //将x坐标移动到逻辑原点,也就是左下角 + float basePointX = 0f + getPaddingLeft(); + for (int i = 0; i < pointers.size(); i++) { + //绘制指针,也就是绘制矩形 + canvas.drawRect(basePointX, + basePointY - pointers.get(i).getHeight(), + basePointX + pointerWidth, + basePointY, + paint); + basePointX += (pointerPadding + pointerWidth); + } + } + + /** + * 开始播放 + */ + public void start() { + if (!isPlaying) { + if (playThread == null) {//开启子线程 + playThread = new Thread(new PlayRunnable()); + playThread.start(); + } + isPlaying = true;//控制子线程中的循环 + } + } + + /** + * 停止子线程,并刷新画布 + */ + public void stop() { + isPlaying = false; + invalidate(); + } + + /** + * 处理子线程发出来的指令,然后刷新布局 + */ + private Handler invalidateHandler = new Handler(msg -> { + invalidate(); + return false; + }); + + public class PlayRunnable implements Runnable { + + @Override + public void run() { + for (float i = 0; i < Integer.MAX_VALUE; ) {//创建一个死循环,每循环一次i+0.1 + try { + for (int j = 0; j < pointers.size(); j++) { //循环改变每个指针高度 + float rate = (float) Math.abs(Math.sin(i + j));//利用正弦有规律的获取0~1的数。 + pointers.get(j).setHeight((basePointY - getPaddingTop()) * rate); //rate 乘以 可绘制高度,来改变每个指针的高度 + } + Thread.sleep(40); + if (isPlaying) { //控制开始/暂停 + invalidateHandler.sendEmptyMessage(0); + i += 0.1; + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + + private static class Pointer { + private float height; + + Pointer(float height) { + this.height = height; + } + + public float getHeight() { + return height; + } + + public void setHeight(float height) { + this.height = height; + } + } +} diff --git a/app/src/main/res/layout/activity_big_image.xml b/app/src/main/res/layout/activity_big_image.xml index 54d8cb4..5bfb6f3 100644 --- a/app/src/main/res/layout/activity_big_image.xml +++ b/app/src/main/res/layout/activity_big_image.xml @@ -2,36 +2,24 @@ - + android:layout_height="match_parent"> - - - + android:layout_height="match_parent" /> - - - - - + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index b6e913d..1a8331a 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -3,21 +3,21 @@ import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; +import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import androidx.core.content.ContextCompat; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; -import com.casic.dcms.base.BaseActivity; import com.luck.picture.lib.photoview.PhotoView; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; import org.jetbrains.annotations.NotNull; @@ -25,36 +25,26 @@ import java.util.List; import butterknife.BindView; +import butterknife.ButterKnife; -public class BigImageActivity extends BaseActivity { +public class BigImageActivity extends AppCompatActivity { - @BindView(R.id.topLayout) - QMUITopBarLayout topLayout; @BindView(R.id.imagePagerView) ViewPager imagePagerView; @BindView(R.id.pageNumberView) TextView pageNumberView; @Override - protected void setupTopBarLayout() { - topLayout.setTitle("查看大图").setTextColor(ContextCompat.getColor(this, R.color.white)); - topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - } + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_big_image); + ButterKnife.bind(this); - @Override - public int initLayoutView() { - return R.layout.activity_big_image; + initEvent(); } @SuppressLint("SetTextI18n") - @Override - public void initData() { + private void initEvent() { int index = getIntent().getIntExtra("index", 0); ArrayList urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java index d4f61b1..a3b11d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -236,9 +239,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java index 2b65bb8..339e71f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -63,6 +64,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,18 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + //开始播放动画 + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + //结束播放动画 + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index da63f04..951b765 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -43,6 +43,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -99,6 +100,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -218,9 +221,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java index 443bcc5..a5be957 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -180,9 +183,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index 2bf82a6..ff4eef3 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -32,6 +32,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -61,6 +62,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java index 5e8eee6..a4dae85 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -156,9 +159,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index cf3e900..27d3a6f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -51,6 +51,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.iceteck.silicompressorr.SiliCompressor; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -110,6 +111,8 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -546,9 +549,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java index 926aecb..e27a310 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -159,9 +162,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 509d0be..396c7fb 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -47,6 +47,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -103,6 +104,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -265,9 +268,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java new file mode 100644 index 0000000..cedc830 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java @@ -0,0 +1,160 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.os.Handler; +import android.util.AttributeSet; +import android.view.View; + +import androidx.annotation.Nullable; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class VoicePlayView extends View { + + private static final String TAG = "VoicePlayView"; + private Paint paint; + //跳动指针的集合 + private List pointers = new ArrayList<>(); + private boolean isPlaying = false; + private Thread playThread; + private float basePointY; + //指针间的间隙 默认5dp + private float pointerPadding = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 3); + //每个指针的宽度 默认3dp + private float pointerWidth = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 5); + + public VoicePlayView(Context context) { + this(context, null); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initConfig(context, attrs); + } + + private void initConfig(Context context, AttributeSet attrs) { + TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.VoicePlayView); + int color = typedArray.getColor(R.styleable.VoicePlayView_indicatorColor, Color.RED); + int indicatorNumber = typedArray.getInt(R.styleable.VoicePlayView_indicatorNumber, 10); + + paint = new Paint(); + paint.setAntiAlias(true); + paint.setColor(color); + + typedArray.recycle(); + + Random random = new Random(); + if (pointers != null) { + pointers.clear(); + } + for (int i = 0; i < indicatorNumber; i++) { + //创建指针对象,利用0~1的随机数 乘以 可绘制区域的高度。作为每个指针的初始高度。 + pointers.add(new Pointer((float) (0.1 * (random.nextInt(10) + 1) * (getHeight() - getPaddingBottom() - getPaddingTop())))); + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + //获取逻辑原点的,也就是画布左下角的坐标。这里减去了paddingBottom的距离 + basePointY = getHeight() - getPaddingBottom(); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //将x坐标移动到逻辑原点,也就是左下角 + float basePointX = 0f + getPaddingLeft(); + for (int i = 0; i < pointers.size(); i++) { + //绘制指针,也就是绘制矩形 + canvas.drawRect(basePointX, + basePointY - pointers.get(i).getHeight(), + basePointX + pointerWidth, + basePointY, + paint); + basePointX += (pointerPadding + pointerWidth); + } + } + + /** + * 开始播放 + */ + public void start() { + if (!isPlaying) { + if (playThread == null) {//开启子线程 + playThread = new Thread(new PlayRunnable()); + playThread.start(); + } + isPlaying = true;//控制子线程中的循环 + } + } + + /** + * 停止子线程,并刷新画布 + */ + public void stop() { + isPlaying = false; + invalidate(); + } + + /** + * 处理子线程发出来的指令,然后刷新布局 + */ + private Handler invalidateHandler = new Handler(msg -> { + invalidate(); + return false; + }); + + public class PlayRunnable implements Runnable { + + @Override + public void run() { + for (float i = 0; i < Integer.MAX_VALUE; ) {//创建一个死循环,每循环一次i+0.1 + try { + for (int j = 0; j < pointers.size(); j++) { //循环改变每个指针高度 + float rate = (float) Math.abs(Math.sin(i + j));//利用正弦有规律的获取0~1的数。 + pointers.get(j).setHeight((basePointY - getPaddingTop()) * rate); //rate 乘以 可绘制高度,来改变每个指针的高度 + } + Thread.sleep(40); + if (isPlaying) { //控制开始/暂停 + invalidateHandler.sendEmptyMessage(0); + i += 0.1; + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + + private static class Pointer { + private float height; + + Pointer(float height) { + this.height = height; + } + + public float getHeight() { + return height; + } + + public void setHeight(float height) { + this.height = height; + } + } +} diff --git a/app/src/main/res/layout/activity_big_image.xml b/app/src/main/res/layout/activity_big_image.xml index 54d8cb4..5bfb6f3 100644 --- a/app/src/main/res/layout/activity_big_image.xml +++ b/app/src/main/res/layout/activity_big_image.xml @@ -2,36 +2,24 @@ - + android:layout_height="match_parent"> - - - + android:layout_height="match_parent" /> - - - - - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_check_detail.xml b/app/src/main/res/layout/activity_case_check_detail.xml index e2582a8..1b0ad33 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -81,12 +81,22 @@ + + urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java index d4f61b1..a3b11d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -236,9 +239,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java index 2b65bb8..339e71f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -63,6 +64,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,18 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + //开始播放动画 + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + //结束播放动画 + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index da63f04..951b765 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -43,6 +43,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -99,6 +100,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -218,9 +221,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java index 443bcc5..a5be957 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -180,9 +183,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index 2bf82a6..ff4eef3 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -32,6 +32,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -61,6 +62,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java index 5e8eee6..a4dae85 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -156,9 +159,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index cf3e900..27d3a6f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -51,6 +51,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.iceteck.silicompressorr.SiliCompressor; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -110,6 +111,8 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -546,9 +549,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java index 926aecb..e27a310 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -159,9 +162,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 509d0be..396c7fb 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -47,6 +47,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -103,6 +104,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -265,9 +268,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java new file mode 100644 index 0000000..cedc830 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java @@ -0,0 +1,160 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.os.Handler; +import android.util.AttributeSet; +import android.view.View; + +import androidx.annotation.Nullable; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class VoicePlayView extends View { + + private static final String TAG = "VoicePlayView"; + private Paint paint; + //跳动指针的集合 + private List pointers = new ArrayList<>(); + private boolean isPlaying = false; + private Thread playThread; + private float basePointY; + //指针间的间隙 默认5dp + private float pointerPadding = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 3); + //每个指针的宽度 默认3dp + private float pointerWidth = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 5); + + public VoicePlayView(Context context) { + this(context, null); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initConfig(context, attrs); + } + + private void initConfig(Context context, AttributeSet attrs) { + TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.VoicePlayView); + int color = typedArray.getColor(R.styleable.VoicePlayView_indicatorColor, Color.RED); + int indicatorNumber = typedArray.getInt(R.styleable.VoicePlayView_indicatorNumber, 10); + + paint = new Paint(); + paint.setAntiAlias(true); + paint.setColor(color); + + typedArray.recycle(); + + Random random = new Random(); + if (pointers != null) { + pointers.clear(); + } + for (int i = 0; i < indicatorNumber; i++) { + //创建指针对象,利用0~1的随机数 乘以 可绘制区域的高度。作为每个指针的初始高度。 + pointers.add(new Pointer((float) (0.1 * (random.nextInt(10) + 1) * (getHeight() - getPaddingBottom() - getPaddingTop())))); + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + //获取逻辑原点的,也就是画布左下角的坐标。这里减去了paddingBottom的距离 + basePointY = getHeight() - getPaddingBottom(); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //将x坐标移动到逻辑原点,也就是左下角 + float basePointX = 0f + getPaddingLeft(); + for (int i = 0; i < pointers.size(); i++) { + //绘制指针,也就是绘制矩形 + canvas.drawRect(basePointX, + basePointY - pointers.get(i).getHeight(), + basePointX + pointerWidth, + basePointY, + paint); + basePointX += (pointerPadding + pointerWidth); + } + } + + /** + * 开始播放 + */ + public void start() { + if (!isPlaying) { + if (playThread == null) {//开启子线程 + playThread = new Thread(new PlayRunnable()); + playThread.start(); + } + isPlaying = true;//控制子线程中的循环 + } + } + + /** + * 停止子线程,并刷新画布 + */ + public void stop() { + isPlaying = false; + invalidate(); + } + + /** + * 处理子线程发出来的指令,然后刷新布局 + */ + private Handler invalidateHandler = new Handler(msg -> { + invalidate(); + return false; + }); + + public class PlayRunnable implements Runnable { + + @Override + public void run() { + for (float i = 0; i < Integer.MAX_VALUE; ) {//创建一个死循环,每循环一次i+0.1 + try { + for (int j = 0; j < pointers.size(); j++) { //循环改变每个指针高度 + float rate = (float) Math.abs(Math.sin(i + j));//利用正弦有规律的获取0~1的数。 + pointers.get(j).setHeight((basePointY - getPaddingTop()) * rate); //rate 乘以 可绘制高度,来改变每个指针的高度 + } + Thread.sleep(40); + if (isPlaying) { //控制开始/暂停 + invalidateHandler.sendEmptyMessage(0); + i += 0.1; + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + + private static class Pointer { + private float height; + + Pointer(float height) { + this.height = height; + } + + public float getHeight() { + return height; + } + + public void setHeight(float height) { + this.height = height; + } + } +} diff --git a/app/src/main/res/layout/activity_big_image.xml b/app/src/main/res/layout/activity_big_image.xml index 54d8cb4..5bfb6f3 100644 --- a/app/src/main/res/layout/activity_big_image.xml +++ b/app/src/main/res/layout/activity_big_image.xml @@ -2,36 +2,24 @@ - + android:layout_height="match_parent"> - - - + android:layout_height="match_parent" /> - - - - - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_check_detail.xml b/app/src/main/res/layout/activity_case_check_detail.xml index e2582a8..1b0ad33 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -81,12 +81,22 @@ + + + + urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java index d4f61b1..a3b11d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -236,9 +239,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java index 2b65bb8..339e71f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -63,6 +64,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,18 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + //开始播放动画 + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + //结束播放动画 + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index da63f04..951b765 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -43,6 +43,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -99,6 +100,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -218,9 +221,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java index 443bcc5..a5be957 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -180,9 +183,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index 2bf82a6..ff4eef3 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -32,6 +32,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -61,6 +62,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java index 5e8eee6..a4dae85 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -156,9 +159,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index cf3e900..27d3a6f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -51,6 +51,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.iceteck.silicompressorr.SiliCompressor; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -110,6 +111,8 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -546,9 +549,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java index 926aecb..e27a310 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -159,9 +162,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 509d0be..396c7fb 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -47,6 +47,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -103,6 +104,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -265,9 +268,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java new file mode 100644 index 0000000..cedc830 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java @@ -0,0 +1,160 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.os.Handler; +import android.util.AttributeSet; +import android.view.View; + +import androidx.annotation.Nullable; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class VoicePlayView extends View { + + private static final String TAG = "VoicePlayView"; + private Paint paint; + //跳动指针的集合 + private List pointers = new ArrayList<>(); + private boolean isPlaying = false; + private Thread playThread; + private float basePointY; + //指针间的间隙 默认5dp + private float pointerPadding = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 3); + //每个指针的宽度 默认3dp + private float pointerWidth = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 5); + + public VoicePlayView(Context context) { + this(context, null); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initConfig(context, attrs); + } + + private void initConfig(Context context, AttributeSet attrs) { + TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.VoicePlayView); + int color = typedArray.getColor(R.styleable.VoicePlayView_indicatorColor, Color.RED); + int indicatorNumber = typedArray.getInt(R.styleable.VoicePlayView_indicatorNumber, 10); + + paint = new Paint(); + paint.setAntiAlias(true); + paint.setColor(color); + + typedArray.recycle(); + + Random random = new Random(); + if (pointers != null) { + pointers.clear(); + } + for (int i = 0; i < indicatorNumber; i++) { + //创建指针对象,利用0~1的随机数 乘以 可绘制区域的高度。作为每个指针的初始高度。 + pointers.add(new Pointer((float) (0.1 * (random.nextInt(10) + 1) * (getHeight() - getPaddingBottom() - getPaddingTop())))); + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + //获取逻辑原点的,也就是画布左下角的坐标。这里减去了paddingBottom的距离 + basePointY = getHeight() - getPaddingBottom(); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //将x坐标移动到逻辑原点,也就是左下角 + float basePointX = 0f + getPaddingLeft(); + for (int i = 0; i < pointers.size(); i++) { + //绘制指针,也就是绘制矩形 + canvas.drawRect(basePointX, + basePointY - pointers.get(i).getHeight(), + basePointX + pointerWidth, + basePointY, + paint); + basePointX += (pointerPadding + pointerWidth); + } + } + + /** + * 开始播放 + */ + public void start() { + if (!isPlaying) { + if (playThread == null) {//开启子线程 + playThread = new Thread(new PlayRunnable()); + playThread.start(); + } + isPlaying = true;//控制子线程中的循环 + } + } + + /** + * 停止子线程,并刷新画布 + */ + public void stop() { + isPlaying = false; + invalidate(); + } + + /** + * 处理子线程发出来的指令,然后刷新布局 + */ + private Handler invalidateHandler = new Handler(msg -> { + invalidate(); + return false; + }); + + public class PlayRunnable implements Runnable { + + @Override + public void run() { + for (float i = 0; i < Integer.MAX_VALUE; ) {//创建一个死循环,每循环一次i+0.1 + try { + for (int j = 0; j < pointers.size(); j++) { //循环改变每个指针高度 + float rate = (float) Math.abs(Math.sin(i + j));//利用正弦有规律的获取0~1的数。 + pointers.get(j).setHeight((basePointY - getPaddingTop()) * rate); //rate 乘以 可绘制高度,来改变每个指针的高度 + } + Thread.sleep(40); + if (isPlaying) { //控制开始/暂停 + invalidateHandler.sendEmptyMessage(0); + i += 0.1; + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + + private static class Pointer { + private float height; + + Pointer(float height) { + this.height = height; + } + + public float getHeight() { + return height; + } + + public void setHeight(float height) { + this.height = height; + } + } +} diff --git a/app/src/main/res/layout/activity_big_image.xml b/app/src/main/res/layout/activity_big_image.xml index 54d8cb4..5bfb6f3 100644 --- a/app/src/main/res/layout/activity_big_image.xml +++ b/app/src/main/res/layout/activity_big_image.xml @@ -2,36 +2,24 @@ - + android:layout_height="match_parent"> - - - + android:layout_height="match_parent" /> - - - - - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_check_detail.xml b/app/src/main/res/layout/activity_case_check_detail.xml index e2582a8..1b0ad33 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -81,12 +81,22 @@ + + + + + + diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index b6e913d..1a8331a 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -3,21 +3,21 @@ import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; +import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import androidx.core.content.ContextCompat; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; -import com.casic.dcms.base.BaseActivity; import com.luck.picture.lib.photoview.PhotoView; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; import org.jetbrains.annotations.NotNull; @@ -25,36 +25,26 @@ import java.util.List; import butterknife.BindView; +import butterknife.ButterKnife; -public class BigImageActivity extends BaseActivity { +public class BigImageActivity extends AppCompatActivity { - @BindView(R.id.topLayout) - QMUITopBarLayout topLayout; @BindView(R.id.imagePagerView) ViewPager imagePagerView; @BindView(R.id.pageNumberView) TextView pageNumberView; @Override - protected void setupTopBarLayout() { - topLayout.setTitle("查看大图").setTextColor(ContextCompat.getColor(this, R.color.white)); - topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - } + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_big_image); + ButterKnife.bind(this); - @Override - public int initLayoutView() { - return R.layout.activity_big_image; + initEvent(); } @SuppressLint("SetTextI18n") - @Override - public void initData() { + private void initEvent() { int index = getIntent().getIntExtra("index", 0); ArrayList urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java index d4f61b1..a3b11d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -236,9 +239,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java index 2b65bb8..339e71f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -63,6 +64,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,18 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + //开始播放动画 + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + //结束播放动画 + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index da63f04..951b765 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -43,6 +43,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -99,6 +100,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -218,9 +221,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java index 443bcc5..a5be957 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -180,9 +183,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index 2bf82a6..ff4eef3 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -32,6 +32,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -61,6 +62,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java index 5e8eee6..a4dae85 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -156,9 +159,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index cf3e900..27d3a6f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -51,6 +51,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.iceteck.silicompressorr.SiliCompressor; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -110,6 +111,8 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -546,9 +549,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java index 926aecb..e27a310 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -159,9 +162,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 509d0be..396c7fb 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -47,6 +47,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -103,6 +104,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -265,9 +268,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java new file mode 100644 index 0000000..cedc830 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java @@ -0,0 +1,160 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.os.Handler; +import android.util.AttributeSet; +import android.view.View; + +import androidx.annotation.Nullable; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class VoicePlayView extends View { + + private static final String TAG = "VoicePlayView"; + private Paint paint; + //跳动指针的集合 + private List pointers = new ArrayList<>(); + private boolean isPlaying = false; + private Thread playThread; + private float basePointY; + //指针间的间隙 默认5dp + private float pointerPadding = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 3); + //每个指针的宽度 默认3dp + private float pointerWidth = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 5); + + public VoicePlayView(Context context) { + this(context, null); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initConfig(context, attrs); + } + + private void initConfig(Context context, AttributeSet attrs) { + TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.VoicePlayView); + int color = typedArray.getColor(R.styleable.VoicePlayView_indicatorColor, Color.RED); + int indicatorNumber = typedArray.getInt(R.styleable.VoicePlayView_indicatorNumber, 10); + + paint = new Paint(); + paint.setAntiAlias(true); + paint.setColor(color); + + typedArray.recycle(); + + Random random = new Random(); + if (pointers != null) { + pointers.clear(); + } + for (int i = 0; i < indicatorNumber; i++) { + //创建指针对象,利用0~1的随机数 乘以 可绘制区域的高度。作为每个指针的初始高度。 + pointers.add(new Pointer((float) (0.1 * (random.nextInt(10) + 1) * (getHeight() - getPaddingBottom() - getPaddingTop())))); + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + //获取逻辑原点的,也就是画布左下角的坐标。这里减去了paddingBottom的距离 + basePointY = getHeight() - getPaddingBottom(); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //将x坐标移动到逻辑原点,也就是左下角 + float basePointX = 0f + getPaddingLeft(); + for (int i = 0; i < pointers.size(); i++) { + //绘制指针,也就是绘制矩形 + canvas.drawRect(basePointX, + basePointY - pointers.get(i).getHeight(), + basePointX + pointerWidth, + basePointY, + paint); + basePointX += (pointerPadding + pointerWidth); + } + } + + /** + * 开始播放 + */ + public void start() { + if (!isPlaying) { + if (playThread == null) {//开启子线程 + playThread = new Thread(new PlayRunnable()); + playThread.start(); + } + isPlaying = true;//控制子线程中的循环 + } + } + + /** + * 停止子线程,并刷新画布 + */ + public void stop() { + isPlaying = false; + invalidate(); + } + + /** + * 处理子线程发出来的指令,然后刷新布局 + */ + private Handler invalidateHandler = new Handler(msg -> { + invalidate(); + return false; + }); + + public class PlayRunnable implements Runnable { + + @Override + public void run() { + for (float i = 0; i < Integer.MAX_VALUE; ) {//创建一个死循环,每循环一次i+0.1 + try { + for (int j = 0; j < pointers.size(); j++) { //循环改变每个指针高度 + float rate = (float) Math.abs(Math.sin(i + j));//利用正弦有规律的获取0~1的数。 + pointers.get(j).setHeight((basePointY - getPaddingTop()) * rate); //rate 乘以 可绘制高度,来改变每个指针的高度 + } + Thread.sleep(40); + if (isPlaying) { //控制开始/暂停 + invalidateHandler.sendEmptyMessage(0); + i += 0.1; + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + + private static class Pointer { + private float height; + + Pointer(float height) { + this.height = height; + } + + public float getHeight() { + return height; + } + + public void setHeight(float height) { + this.height = height; + } + } +} diff --git a/app/src/main/res/layout/activity_big_image.xml b/app/src/main/res/layout/activity_big_image.xml index 54d8cb4..5bfb6f3 100644 --- a/app/src/main/res/layout/activity_big_image.xml +++ b/app/src/main/res/layout/activity_big_image.xml @@ -2,36 +2,24 @@ - + android:layout_height="match_parent"> - - - + android:layout_height="match_parent" /> - - - - - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_check_detail.xml b/app/src/main/res/layout/activity_case_check_detail.xml index e2582a8..1b0ad33 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -81,12 +81,22 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_case_handle_detail.xml b/app/src/main/res/layout/activity_case_handle_detail.xml index f50dc55..ffe5638 100644 --- a/app/src/main/res/layout/activity_case_handle_detail.xml +++ b/app/src/main/res/layout/activity_case_handle_detail.xml @@ -42,12 +42,22 @@ + + urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java index d4f61b1..a3b11d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -236,9 +239,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java index 2b65bb8..339e71f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -63,6 +64,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,18 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + //开始播放动画 + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + //结束播放动画 + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index da63f04..951b765 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -43,6 +43,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -99,6 +100,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -218,9 +221,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java index 443bcc5..a5be957 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -180,9 +183,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index 2bf82a6..ff4eef3 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -32,6 +32,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -61,6 +62,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java index 5e8eee6..a4dae85 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -156,9 +159,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index cf3e900..27d3a6f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -51,6 +51,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.iceteck.silicompressorr.SiliCompressor; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -110,6 +111,8 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -546,9 +549,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java index 926aecb..e27a310 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -159,9 +162,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 509d0be..396c7fb 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -47,6 +47,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -103,6 +104,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -265,9 +268,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java new file mode 100644 index 0000000..cedc830 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java @@ -0,0 +1,160 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.os.Handler; +import android.util.AttributeSet; +import android.view.View; + +import androidx.annotation.Nullable; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class VoicePlayView extends View { + + private static final String TAG = "VoicePlayView"; + private Paint paint; + //跳动指针的集合 + private List pointers = new ArrayList<>(); + private boolean isPlaying = false; + private Thread playThread; + private float basePointY; + //指针间的间隙 默认5dp + private float pointerPadding = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 3); + //每个指针的宽度 默认3dp + private float pointerWidth = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 5); + + public VoicePlayView(Context context) { + this(context, null); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initConfig(context, attrs); + } + + private void initConfig(Context context, AttributeSet attrs) { + TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.VoicePlayView); + int color = typedArray.getColor(R.styleable.VoicePlayView_indicatorColor, Color.RED); + int indicatorNumber = typedArray.getInt(R.styleable.VoicePlayView_indicatorNumber, 10); + + paint = new Paint(); + paint.setAntiAlias(true); + paint.setColor(color); + + typedArray.recycle(); + + Random random = new Random(); + if (pointers != null) { + pointers.clear(); + } + for (int i = 0; i < indicatorNumber; i++) { + //创建指针对象,利用0~1的随机数 乘以 可绘制区域的高度。作为每个指针的初始高度。 + pointers.add(new Pointer((float) (0.1 * (random.nextInt(10) + 1) * (getHeight() - getPaddingBottom() - getPaddingTop())))); + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + //获取逻辑原点的,也就是画布左下角的坐标。这里减去了paddingBottom的距离 + basePointY = getHeight() - getPaddingBottom(); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //将x坐标移动到逻辑原点,也就是左下角 + float basePointX = 0f + getPaddingLeft(); + for (int i = 0; i < pointers.size(); i++) { + //绘制指针,也就是绘制矩形 + canvas.drawRect(basePointX, + basePointY - pointers.get(i).getHeight(), + basePointX + pointerWidth, + basePointY, + paint); + basePointX += (pointerPadding + pointerWidth); + } + } + + /** + * 开始播放 + */ + public void start() { + if (!isPlaying) { + if (playThread == null) {//开启子线程 + playThread = new Thread(new PlayRunnable()); + playThread.start(); + } + isPlaying = true;//控制子线程中的循环 + } + } + + /** + * 停止子线程,并刷新画布 + */ + public void stop() { + isPlaying = false; + invalidate(); + } + + /** + * 处理子线程发出来的指令,然后刷新布局 + */ + private Handler invalidateHandler = new Handler(msg -> { + invalidate(); + return false; + }); + + public class PlayRunnable implements Runnable { + + @Override + public void run() { + for (float i = 0; i < Integer.MAX_VALUE; ) {//创建一个死循环,每循环一次i+0.1 + try { + for (int j = 0; j < pointers.size(); j++) { //循环改变每个指针高度 + float rate = (float) Math.abs(Math.sin(i + j));//利用正弦有规律的获取0~1的数。 + pointers.get(j).setHeight((basePointY - getPaddingTop()) * rate); //rate 乘以 可绘制高度,来改变每个指针的高度 + } + Thread.sleep(40); + if (isPlaying) { //控制开始/暂停 + invalidateHandler.sendEmptyMessage(0); + i += 0.1; + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + + private static class Pointer { + private float height; + + Pointer(float height) { + this.height = height; + } + + public float getHeight() { + return height; + } + + public void setHeight(float height) { + this.height = height; + } + } +} diff --git a/app/src/main/res/layout/activity_big_image.xml b/app/src/main/res/layout/activity_big_image.xml index 54d8cb4..5bfb6f3 100644 --- a/app/src/main/res/layout/activity_big_image.xml +++ b/app/src/main/res/layout/activity_big_image.xml @@ -2,36 +2,24 @@ - + android:layout_height="match_parent"> - - - + android:layout_height="match_parent" /> - - - - - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_check_detail.xml b/app/src/main/res/layout/activity_case_check_detail.xml index e2582a8..1b0ad33 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -81,12 +81,22 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_case_handle_detail.xml b/app/src/main/res/layout/activity_case_handle_detail.xml index f50dc55..ffe5638 100644 --- a/app/src/main/res/layout/activity_case_handle_detail.xml +++ b/app/src/main/res/layout/activity_case_handle_detail.xml @@ -42,12 +42,22 @@ + + + + urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java index d4f61b1..a3b11d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -236,9 +239,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java index 2b65bb8..339e71f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -63,6 +64,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,18 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + //开始播放动画 + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + //结束播放动画 + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index da63f04..951b765 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -43,6 +43,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -99,6 +100,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -218,9 +221,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java index 443bcc5..a5be957 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -180,9 +183,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index 2bf82a6..ff4eef3 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -32,6 +32,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -61,6 +62,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java index 5e8eee6..a4dae85 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -156,9 +159,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index cf3e900..27d3a6f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -51,6 +51,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.iceteck.silicompressorr.SiliCompressor; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -110,6 +111,8 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -546,9 +549,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java index 926aecb..e27a310 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -159,9 +162,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 509d0be..396c7fb 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -47,6 +47,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -103,6 +104,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -265,9 +268,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java new file mode 100644 index 0000000..cedc830 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java @@ -0,0 +1,160 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.os.Handler; +import android.util.AttributeSet; +import android.view.View; + +import androidx.annotation.Nullable; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class VoicePlayView extends View { + + private static final String TAG = "VoicePlayView"; + private Paint paint; + //跳动指针的集合 + private List pointers = new ArrayList<>(); + private boolean isPlaying = false; + private Thread playThread; + private float basePointY; + //指针间的间隙 默认5dp + private float pointerPadding = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 3); + //每个指针的宽度 默认3dp + private float pointerWidth = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 5); + + public VoicePlayView(Context context) { + this(context, null); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initConfig(context, attrs); + } + + private void initConfig(Context context, AttributeSet attrs) { + TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.VoicePlayView); + int color = typedArray.getColor(R.styleable.VoicePlayView_indicatorColor, Color.RED); + int indicatorNumber = typedArray.getInt(R.styleable.VoicePlayView_indicatorNumber, 10); + + paint = new Paint(); + paint.setAntiAlias(true); + paint.setColor(color); + + typedArray.recycle(); + + Random random = new Random(); + if (pointers != null) { + pointers.clear(); + } + for (int i = 0; i < indicatorNumber; i++) { + //创建指针对象,利用0~1的随机数 乘以 可绘制区域的高度。作为每个指针的初始高度。 + pointers.add(new Pointer((float) (0.1 * (random.nextInt(10) + 1) * (getHeight() - getPaddingBottom() - getPaddingTop())))); + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + //获取逻辑原点的,也就是画布左下角的坐标。这里减去了paddingBottom的距离 + basePointY = getHeight() - getPaddingBottom(); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //将x坐标移动到逻辑原点,也就是左下角 + float basePointX = 0f + getPaddingLeft(); + for (int i = 0; i < pointers.size(); i++) { + //绘制指针,也就是绘制矩形 + canvas.drawRect(basePointX, + basePointY - pointers.get(i).getHeight(), + basePointX + pointerWidth, + basePointY, + paint); + basePointX += (pointerPadding + pointerWidth); + } + } + + /** + * 开始播放 + */ + public void start() { + if (!isPlaying) { + if (playThread == null) {//开启子线程 + playThread = new Thread(new PlayRunnable()); + playThread.start(); + } + isPlaying = true;//控制子线程中的循环 + } + } + + /** + * 停止子线程,并刷新画布 + */ + public void stop() { + isPlaying = false; + invalidate(); + } + + /** + * 处理子线程发出来的指令,然后刷新布局 + */ + private Handler invalidateHandler = new Handler(msg -> { + invalidate(); + return false; + }); + + public class PlayRunnable implements Runnable { + + @Override + public void run() { + for (float i = 0; i < Integer.MAX_VALUE; ) {//创建一个死循环,每循环一次i+0.1 + try { + for (int j = 0; j < pointers.size(); j++) { //循环改变每个指针高度 + float rate = (float) Math.abs(Math.sin(i + j));//利用正弦有规律的获取0~1的数。 + pointers.get(j).setHeight((basePointY - getPaddingTop()) * rate); //rate 乘以 可绘制高度,来改变每个指针的高度 + } + Thread.sleep(40); + if (isPlaying) { //控制开始/暂停 + invalidateHandler.sendEmptyMessage(0); + i += 0.1; + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + + private static class Pointer { + private float height; + + Pointer(float height) { + this.height = height; + } + + public float getHeight() { + return height; + } + + public void setHeight(float height) { + this.height = height; + } + } +} diff --git a/app/src/main/res/layout/activity_big_image.xml b/app/src/main/res/layout/activity_big_image.xml index 54d8cb4..5bfb6f3 100644 --- a/app/src/main/res/layout/activity_big_image.xml +++ b/app/src/main/res/layout/activity_big_image.xml @@ -2,36 +2,24 @@ - + android:layout_height="match_parent"> - - - + android:layout_height="match_parent" /> - - - - - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_check_detail.xml b/app/src/main/res/layout/activity_case_check_detail.xml index e2582a8..1b0ad33 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -81,12 +81,22 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_case_handle_detail.xml b/app/src/main/res/layout/activity_case_handle_detail.xml index f50dc55..ffe5638 100644 --- a/app/src/main/res/layout/activity_case_handle_detail.xml +++ b/app/src/main/res/layout/activity_case_handle_detail.xml @@ -42,12 +42,22 @@ + + + + + + urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java index d4f61b1..a3b11d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -236,9 +239,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java index 2b65bb8..339e71f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -63,6 +64,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,18 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + //开始播放动画 + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + //结束播放动画 + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index da63f04..951b765 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -43,6 +43,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -99,6 +100,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -218,9 +221,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java index 443bcc5..a5be957 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -180,9 +183,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index 2bf82a6..ff4eef3 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -32,6 +32,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -61,6 +62,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java index 5e8eee6..a4dae85 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -156,9 +159,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index cf3e900..27d3a6f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -51,6 +51,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.iceteck.silicompressorr.SiliCompressor; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -110,6 +111,8 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -546,9 +549,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java index 926aecb..e27a310 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -159,9 +162,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 509d0be..396c7fb 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -47,6 +47,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -103,6 +104,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -265,9 +268,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java new file mode 100644 index 0000000..cedc830 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java @@ -0,0 +1,160 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.os.Handler; +import android.util.AttributeSet; +import android.view.View; + +import androidx.annotation.Nullable; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class VoicePlayView extends View { + + private static final String TAG = "VoicePlayView"; + private Paint paint; + //跳动指针的集合 + private List pointers = new ArrayList<>(); + private boolean isPlaying = false; + private Thread playThread; + private float basePointY; + //指针间的间隙 默认5dp + private float pointerPadding = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 3); + //每个指针的宽度 默认3dp + private float pointerWidth = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 5); + + public VoicePlayView(Context context) { + this(context, null); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initConfig(context, attrs); + } + + private void initConfig(Context context, AttributeSet attrs) { + TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.VoicePlayView); + int color = typedArray.getColor(R.styleable.VoicePlayView_indicatorColor, Color.RED); + int indicatorNumber = typedArray.getInt(R.styleable.VoicePlayView_indicatorNumber, 10); + + paint = new Paint(); + paint.setAntiAlias(true); + paint.setColor(color); + + typedArray.recycle(); + + Random random = new Random(); + if (pointers != null) { + pointers.clear(); + } + for (int i = 0; i < indicatorNumber; i++) { + //创建指针对象,利用0~1的随机数 乘以 可绘制区域的高度。作为每个指针的初始高度。 + pointers.add(new Pointer((float) (0.1 * (random.nextInt(10) + 1) * (getHeight() - getPaddingBottom() - getPaddingTop())))); + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + //获取逻辑原点的,也就是画布左下角的坐标。这里减去了paddingBottom的距离 + basePointY = getHeight() - getPaddingBottom(); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //将x坐标移动到逻辑原点,也就是左下角 + float basePointX = 0f + getPaddingLeft(); + for (int i = 0; i < pointers.size(); i++) { + //绘制指针,也就是绘制矩形 + canvas.drawRect(basePointX, + basePointY - pointers.get(i).getHeight(), + basePointX + pointerWidth, + basePointY, + paint); + basePointX += (pointerPadding + pointerWidth); + } + } + + /** + * 开始播放 + */ + public void start() { + if (!isPlaying) { + if (playThread == null) {//开启子线程 + playThread = new Thread(new PlayRunnable()); + playThread.start(); + } + isPlaying = true;//控制子线程中的循环 + } + } + + /** + * 停止子线程,并刷新画布 + */ + public void stop() { + isPlaying = false; + invalidate(); + } + + /** + * 处理子线程发出来的指令,然后刷新布局 + */ + private Handler invalidateHandler = new Handler(msg -> { + invalidate(); + return false; + }); + + public class PlayRunnable implements Runnable { + + @Override + public void run() { + for (float i = 0; i < Integer.MAX_VALUE; ) {//创建一个死循环,每循环一次i+0.1 + try { + for (int j = 0; j < pointers.size(); j++) { //循环改变每个指针高度 + float rate = (float) Math.abs(Math.sin(i + j));//利用正弦有规律的获取0~1的数。 + pointers.get(j).setHeight((basePointY - getPaddingTop()) * rate); //rate 乘以 可绘制高度,来改变每个指针的高度 + } + Thread.sleep(40); + if (isPlaying) { //控制开始/暂停 + invalidateHandler.sendEmptyMessage(0); + i += 0.1; + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + + private static class Pointer { + private float height; + + Pointer(float height) { + this.height = height; + } + + public float getHeight() { + return height; + } + + public void setHeight(float height) { + this.height = height; + } + } +} diff --git a/app/src/main/res/layout/activity_big_image.xml b/app/src/main/res/layout/activity_big_image.xml index 54d8cb4..5bfb6f3 100644 --- a/app/src/main/res/layout/activity_big_image.xml +++ b/app/src/main/res/layout/activity_big_image.xml @@ -2,36 +2,24 @@ - + android:layout_height="match_parent"> - - - + android:layout_height="match_parent" /> - - - - - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_check_detail.xml b/app/src/main/res/layout/activity_case_check_detail.xml index e2582a8..1b0ad33 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -81,12 +81,22 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_case_handle_detail.xml b/app/src/main/res/layout/activity_case_handle_detail.xml index f50dc55..ffe5638 100644 --- a/app/src/main/res/layout/activity_case_handle_detail.xml +++ b/app/src/main/res/layout/activity_case_handle_detail.xml @@ -42,12 +42,22 @@ + + + + + + + + urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java index d4f61b1..a3b11d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -236,9 +239,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java index 2b65bb8..339e71f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -63,6 +64,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,18 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + //开始播放动画 + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + //结束播放动画 + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index da63f04..951b765 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -43,6 +43,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -99,6 +100,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -218,9 +221,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java index 443bcc5..a5be957 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -180,9 +183,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index 2bf82a6..ff4eef3 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -32,6 +32,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -61,6 +62,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java index 5e8eee6..a4dae85 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -156,9 +159,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index cf3e900..27d3a6f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -51,6 +51,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.iceteck.silicompressorr.SiliCompressor; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -110,6 +111,8 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -546,9 +549,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java index 926aecb..e27a310 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -159,9 +162,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 509d0be..396c7fb 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -47,6 +47,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -103,6 +104,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -265,9 +268,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java new file mode 100644 index 0000000..cedc830 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java @@ -0,0 +1,160 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.os.Handler; +import android.util.AttributeSet; +import android.view.View; + +import androidx.annotation.Nullable; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class VoicePlayView extends View { + + private static final String TAG = "VoicePlayView"; + private Paint paint; + //跳动指针的集合 + private List pointers = new ArrayList<>(); + private boolean isPlaying = false; + private Thread playThread; + private float basePointY; + //指针间的间隙 默认5dp + private float pointerPadding = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 3); + //每个指针的宽度 默认3dp + private float pointerWidth = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 5); + + public VoicePlayView(Context context) { + this(context, null); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initConfig(context, attrs); + } + + private void initConfig(Context context, AttributeSet attrs) { + TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.VoicePlayView); + int color = typedArray.getColor(R.styleable.VoicePlayView_indicatorColor, Color.RED); + int indicatorNumber = typedArray.getInt(R.styleable.VoicePlayView_indicatorNumber, 10); + + paint = new Paint(); + paint.setAntiAlias(true); + paint.setColor(color); + + typedArray.recycle(); + + Random random = new Random(); + if (pointers != null) { + pointers.clear(); + } + for (int i = 0; i < indicatorNumber; i++) { + //创建指针对象,利用0~1的随机数 乘以 可绘制区域的高度。作为每个指针的初始高度。 + pointers.add(new Pointer((float) (0.1 * (random.nextInt(10) + 1) * (getHeight() - getPaddingBottom() - getPaddingTop())))); + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + //获取逻辑原点的,也就是画布左下角的坐标。这里减去了paddingBottom的距离 + basePointY = getHeight() - getPaddingBottom(); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //将x坐标移动到逻辑原点,也就是左下角 + float basePointX = 0f + getPaddingLeft(); + for (int i = 0; i < pointers.size(); i++) { + //绘制指针,也就是绘制矩形 + canvas.drawRect(basePointX, + basePointY - pointers.get(i).getHeight(), + basePointX + pointerWidth, + basePointY, + paint); + basePointX += (pointerPadding + pointerWidth); + } + } + + /** + * 开始播放 + */ + public void start() { + if (!isPlaying) { + if (playThread == null) {//开启子线程 + playThread = new Thread(new PlayRunnable()); + playThread.start(); + } + isPlaying = true;//控制子线程中的循环 + } + } + + /** + * 停止子线程,并刷新画布 + */ + public void stop() { + isPlaying = false; + invalidate(); + } + + /** + * 处理子线程发出来的指令,然后刷新布局 + */ + private Handler invalidateHandler = new Handler(msg -> { + invalidate(); + return false; + }); + + public class PlayRunnable implements Runnable { + + @Override + public void run() { + for (float i = 0; i < Integer.MAX_VALUE; ) {//创建一个死循环,每循环一次i+0.1 + try { + for (int j = 0; j < pointers.size(); j++) { //循环改变每个指针高度 + float rate = (float) Math.abs(Math.sin(i + j));//利用正弦有规律的获取0~1的数。 + pointers.get(j).setHeight((basePointY - getPaddingTop()) * rate); //rate 乘以 可绘制高度,来改变每个指针的高度 + } + Thread.sleep(40); + if (isPlaying) { //控制开始/暂停 + invalidateHandler.sendEmptyMessage(0); + i += 0.1; + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + + private static class Pointer { + private float height; + + Pointer(float height) { + this.height = height; + } + + public float getHeight() { + return height; + } + + public void setHeight(float height) { + this.height = height; + } + } +} diff --git a/app/src/main/res/layout/activity_big_image.xml b/app/src/main/res/layout/activity_big_image.xml index 54d8cb4..5bfb6f3 100644 --- a/app/src/main/res/layout/activity_big_image.xml +++ b/app/src/main/res/layout/activity_big_image.xml @@ -2,36 +2,24 @@ - + android:layout_height="match_parent"> - - - + android:layout_height="match_parent" /> - - - - - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_check_detail.xml b/app/src/main/res/layout/activity_case_check_detail.xml index e2582a8..1b0ad33 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -81,12 +81,22 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_case_handle_detail.xml b/app/src/main/res/layout/activity_case_handle_detail.xml index f50dc55..ffe5638 100644 --- a/app/src/main/res/layout/activity_case_handle_detail.xml +++ b/app/src/main/res/layout/activity_case_handle_detail.xml @@ -42,12 +42,22 @@ + + + + + + + + + + urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java index d4f61b1..a3b11d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -236,9 +239,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java index 2b65bb8..339e71f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -63,6 +64,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,18 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + //开始播放动画 + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + //结束播放动画 + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index da63f04..951b765 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -43,6 +43,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -99,6 +100,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -218,9 +221,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java index 443bcc5..a5be957 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -180,9 +183,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index 2bf82a6..ff4eef3 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -32,6 +32,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -61,6 +62,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java index 5e8eee6..a4dae85 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -156,9 +159,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index cf3e900..27d3a6f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -51,6 +51,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.iceteck.silicompressorr.SiliCompressor; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -110,6 +111,8 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -546,9 +549,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java index 926aecb..e27a310 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -159,9 +162,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 509d0be..396c7fb 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -47,6 +47,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -103,6 +104,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -265,9 +268,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java new file mode 100644 index 0000000..cedc830 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java @@ -0,0 +1,160 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.os.Handler; +import android.util.AttributeSet; +import android.view.View; + +import androidx.annotation.Nullable; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class VoicePlayView extends View { + + private static final String TAG = "VoicePlayView"; + private Paint paint; + //跳动指针的集合 + private List pointers = new ArrayList<>(); + private boolean isPlaying = false; + private Thread playThread; + private float basePointY; + //指针间的间隙 默认5dp + private float pointerPadding = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 3); + //每个指针的宽度 默认3dp + private float pointerWidth = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 5); + + public VoicePlayView(Context context) { + this(context, null); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initConfig(context, attrs); + } + + private void initConfig(Context context, AttributeSet attrs) { + TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.VoicePlayView); + int color = typedArray.getColor(R.styleable.VoicePlayView_indicatorColor, Color.RED); + int indicatorNumber = typedArray.getInt(R.styleable.VoicePlayView_indicatorNumber, 10); + + paint = new Paint(); + paint.setAntiAlias(true); + paint.setColor(color); + + typedArray.recycle(); + + Random random = new Random(); + if (pointers != null) { + pointers.clear(); + } + for (int i = 0; i < indicatorNumber; i++) { + //创建指针对象,利用0~1的随机数 乘以 可绘制区域的高度。作为每个指针的初始高度。 + pointers.add(new Pointer((float) (0.1 * (random.nextInt(10) + 1) * (getHeight() - getPaddingBottom() - getPaddingTop())))); + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + //获取逻辑原点的,也就是画布左下角的坐标。这里减去了paddingBottom的距离 + basePointY = getHeight() - getPaddingBottom(); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //将x坐标移动到逻辑原点,也就是左下角 + float basePointX = 0f + getPaddingLeft(); + for (int i = 0; i < pointers.size(); i++) { + //绘制指针,也就是绘制矩形 + canvas.drawRect(basePointX, + basePointY - pointers.get(i).getHeight(), + basePointX + pointerWidth, + basePointY, + paint); + basePointX += (pointerPadding + pointerWidth); + } + } + + /** + * 开始播放 + */ + public void start() { + if (!isPlaying) { + if (playThread == null) {//开启子线程 + playThread = new Thread(new PlayRunnable()); + playThread.start(); + } + isPlaying = true;//控制子线程中的循环 + } + } + + /** + * 停止子线程,并刷新画布 + */ + public void stop() { + isPlaying = false; + invalidate(); + } + + /** + * 处理子线程发出来的指令,然后刷新布局 + */ + private Handler invalidateHandler = new Handler(msg -> { + invalidate(); + return false; + }); + + public class PlayRunnable implements Runnable { + + @Override + public void run() { + for (float i = 0; i < Integer.MAX_VALUE; ) {//创建一个死循环,每循环一次i+0.1 + try { + for (int j = 0; j < pointers.size(); j++) { //循环改变每个指针高度 + float rate = (float) Math.abs(Math.sin(i + j));//利用正弦有规律的获取0~1的数。 + pointers.get(j).setHeight((basePointY - getPaddingTop()) * rate); //rate 乘以 可绘制高度,来改变每个指针的高度 + } + Thread.sleep(40); + if (isPlaying) { //控制开始/暂停 + invalidateHandler.sendEmptyMessage(0); + i += 0.1; + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + + private static class Pointer { + private float height; + + Pointer(float height) { + this.height = height; + } + + public float getHeight() { + return height; + } + + public void setHeight(float height) { + this.height = height; + } + } +} diff --git a/app/src/main/res/layout/activity_big_image.xml b/app/src/main/res/layout/activity_big_image.xml index 54d8cb4..5bfb6f3 100644 --- a/app/src/main/res/layout/activity_big_image.xml +++ b/app/src/main/res/layout/activity_big_image.xml @@ -2,36 +2,24 @@ - + android:layout_height="match_parent"> - - - + android:layout_height="match_parent" /> - - - - - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_check_detail.xml b/app/src/main/res/layout/activity_case_check_detail.xml index e2582a8..1b0ad33 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -81,12 +81,22 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_case_handle_detail.xml b/app/src/main/res/layout/activity_case_handle_detail.xml index f50dc55..ffe5638 100644 --- a/app/src/main/res/layout/activity_case_handle_detail.xml +++ b/app/src/main/res/layout/activity_case_handle_detail.xml @@ -42,12 +42,22 @@ + + + + + + + + + + + + urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java index d4f61b1..a3b11d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -236,9 +239,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java index 2b65bb8..339e71f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -63,6 +64,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,18 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + //开始播放动画 + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + //结束播放动画 + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index da63f04..951b765 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -43,6 +43,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -99,6 +100,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -218,9 +221,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java index 443bcc5..a5be957 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -180,9 +183,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index 2bf82a6..ff4eef3 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -32,6 +32,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -61,6 +62,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java index 5e8eee6..a4dae85 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -156,9 +159,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index cf3e900..27d3a6f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -51,6 +51,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.iceteck.silicompressorr.SiliCompressor; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -110,6 +111,8 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -546,9 +549,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java index 926aecb..e27a310 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -159,9 +162,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 509d0be..396c7fb 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -47,6 +47,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -103,6 +104,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -265,9 +268,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java new file mode 100644 index 0000000..cedc830 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java @@ -0,0 +1,160 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.os.Handler; +import android.util.AttributeSet; +import android.view.View; + +import androidx.annotation.Nullable; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class VoicePlayView extends View { + + private static final String TAG = "VoicePlayView"; + private Paint paint; + //跳动指针的集合 + private List pointers = new ArrayList<>(); + private boolean isPlaying = false; + private Thread playThread; + private float basePointY; + //指针间的间隙 默认5dp + private float pointerPadding = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 3); + //每个指针的宽度 默认3dp + private float pointerWidth = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 5); + + public VoicePlayView(Context context) { + this(context, null); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initConfig(context, attrs); + } + + private void initConfig(Context context, AttributeSet attrs) { + TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.VoicePlayView); + int color = typedArray.getColor(R.styleable.VoicePlayView_indicatorColor, Color.RED); + int indicatorNumber = typedArray.getInt(R.styleable.VoicePlayView_indicatorNumber, 10); + + paint = new Paint(); + paint.setAntiAlias(true); + paint.setColor(color); + + typedArray.recycle(); + + Random random = new Random(); + if (pointers != null) { + pointers.clear(); + } + for (int i = 0; i < indicatorNumber; i++) { + //创建指针对象,利用0~1的随机数 乘以 可绘制区域的高度。作为每个指针的初始高度。 + pointers.add(new Pointer((float) (0.1 * (random.nextInt(10) + 1) * (getHeight() - getPaddingBottom() - getPaddingTop())))); + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + //获取逻辑原点的,也就是画布左下角的坐标。这里减去了paddingBottom的距离 + basePointY = getHeight() - getPaddingBottom(); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //将x坐标移动到逻辑原点,也就是左下角 + float basePointX = 0f + getPaddingLeft(); + for (int i = 0; i < pointers.size(); i++) { + //绘制指针,也就是绘制矩形 + canvas.drawRect(basePointX, + basePointY - pointers.get(i).getHeight(), + basePointX + pointerWidth, + basePointY, + paint); + basePointX += (pointerPadding + pointerWidth); + } + } + + /** + * 开始播放 + */ + public void start() { + if (!isPlaying) { + if (playThread == null) {//开启子线程 + playThread = new Thread(new PlayRunnable()); + playThread.start(); + } + isPlaying = true;//控制子线程中的循环 + } + } + + /** + * 停止子线程,并刷新画布 + */ + public void stop() { + isPlaying = false; + invalidate(); + } + + /** + * 处理子线程发出来的指令,然后刷新布局 + */ + private Handler invalidateHandler = new Handler(msg -> { + invalidate(); + return false; + }); + + public class PlayRunnable implements Runnable { + + @Override + public void run() { + for (float i = 0; i < Integer.MAX_VALUE; ) {//创建一个死循环,每循环一次i+0.1 + try { + for (int j = 0; j < pointers.size(); j++) { //循环改变每个指针高度 + float rate = (float) Math.abs(Math.sin(i + j));//利用正弦有规律的获取0~1的数。 + pointers.get(j).setHeight((basePointY - getPaddingTop()) * rate); //rate 乘以 可绘制高度,来改变每个指针的高度 + } + Thread.sleep(40); + if (isPlaying) { //控制开始/暂停 + invalidateHandler.sendEmptyMessage(0); + i += 0.1; + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + + private static class Pointer { + private float height; + + Pointer(float height) { + this.height = height; + } + + public float getHeight() { + return height; + } + + public void setHeight(float height) { + this.height = height; + } + } +} diff --git a/app/src/main/res/layout/activity_big_image.xml b/app/src/main/res/layout/activity_big_image.xml index 54d8cb4..5bfb6f3 100644 --- a/app/src/main/res/layout/activity_big_image.xml +++ b/app/src/main/res/layout/activity_big_image.xml @@ -2,36 +2,24 @@ - + android:layout_height="match_parent"> - - - + android:layout_height="match_parent" /> - - - - - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_check_detail.xml b/app/src/main/res/layout/activity_case_check_detail.xml index e2582a8..1b0ad33 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -81,12 +81,22 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_case_handle_detail.xml b/app/src/main/res/layout/activity_case_handle_detail.xml index f50dc55..ffe5638 100644 --- a/app/src/main/res/layout/activity_case_handle_detail.xml +++ b/app/src/main/res/layout/activity_case_handle_detail.xml @@ -42,12 +42,22 @@ + + + + + + + + + + + + + + urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java index d4f61b1..a3b11d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -236,9 +239,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java index 2b65bb8..339e71f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -63,6 +64,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,18 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + //开始播放动画 + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + //结束播放动画 + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index da63f04..951b765 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -43,6 +43,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -99,6 +100,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -218,9 +221,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java index 443bcc5..a5be957 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -180,9 +183,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index 2bf82a6..ff4eef3 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -32,6 +32,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -61,6 +62,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java index 5e8eee6..a4dae85 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -156,9 +159,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index cf3e900..27d3a6f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -51,6 +51,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.iceteck.silicompressorr.SiliCompressor; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -110,6 +111,8 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -546,9 +549,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java index 926aecb..e27a310 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -159,9 +162,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 509d0be..396c7fb 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -47,6 +47,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -103,6 +104,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -265,9 +268,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java new file mode 100644 index 0000000..cedc830 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java @@ -0,0 +1,160 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.os.Handler; +import android.util.AttributeSet; +import android.view.View; + +import androidx.annotation.Nullable; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class VoicePlayView extends View { + + private static final String TAG = "VoicePlayView"; + private Paint paint; + //跳动指针的集合 + private List pointers = new ArrayList<>(); + private boolean isPlaying = false; + private Thread playThread; + private float basePointY; + //指针间的间隙 默认5dp + private float pointerPadding = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 3); + //每个指针的宽度 默认3dp + private float pointerWidth = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 5); + + public VoicePlayView(Context context) { + this(context, null); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initConfig(context, attrs); + } + + private void initConfig(Context context, AttributeSet attrs) { + TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.VoicePlayView); + int color = typedArray.getColor(R.styleable.VoicePlayView_indicatorColor, Color.RED); + int indicatorNumber = typedArray.getInt(R.styleable.VoicePlayView_indicatorNumber, 10); + + paint = new Paint(); + paint.setAntiAlias(true); + paint.setColor(color); + + typedArray.recycle(); + + Random random = new Random(); + if (pointers != null) { + pointers.clear(); + } + for (int i = 0; i < indicatorNumber; i++) { + //创建指针对象,利用0~1的随机数 乘以 可绘制区域的高度。作为每个指针的初始高度。 + pointers.add(new Pointer((float) (0.1 * (random.nextInt(10) + 1) * (getHeight() - getPaddingBottom() - getPaddingTop())))); + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + //获取逻辑原点的,也就是画布左下角的坐标。这里减去了paddingBottom的距离 + basePointY = getHeight() - getPaddingBottom(); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //将x坐标移动到逻辑原点,也就是左下角 + float basePointX = 0f + getPaddingLeft(); + for (int i = 0; i < pointers.size(); i++) { + //绘制指针,也就是绘制矩形 + canvas.drawRect(basePointX, + basePointY - pointers.get(i).getHeight(), + basePointX + pointerWidth, + basePointY, + paint); + basePointX += (pointerPadding + pointerWidth); + } + } + + /** + * 开始播放 + */ + public void start() { + if (!isPlaying) { + if (playThread == null) {//开启子线程 + playThread = new Thread(new PlayRunnable()); + playThread.start(); + } + isPlaying = true;//控制子线程中的循环 + } + } + + /** + * 停止子线程,并刷新画布 + */ + public void stop() { + isPlaying = false; + invalidate(); + } + + /** + * 处理子线程发出来的指令,然后刷新布局 + */ + private Handler invalidateHandler = new Handler(msg -> { + invalidate(); + return false; + }); + + public class PlayRunnable implements Runnable { + + @Override + public void run() { + for (float i = 0; i < Integer.MAX_VALUE; ) {//创建一个死循环,每循环一次i+0.1 + try { + for (int j = 0; j < pointers.size(); j++) { //循环改变每个指针高度 + float rate = (float) Math.abs(Math.sin(i + j));//利用正弦有规律的获取0~1的数。 + pointers.get(j).setHeight((basePointY - getPaddingTop()) * rate); //rate 乘以 可绘制高度,来改变每个指针的高度 + } + Thread.sleep(40); + if (isPlaying) { //控制开始/暂停 + invalidateHandler.sendEmptyMessage(0); + i += 0.1; + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + + private static class Pointer { + private float height; + + Pointer(float height) { + this.height = height; + } + + public float getHeight() { + return height; + } + + public void setHeight(float height) { + this.height = height; + } + } +} diff --git a/app/src/main/res/layout/activity_big_image.xml b/app/src/main/res/layout/activity_big_image.xml index 54d8cb4..5bfb6f3 100644 --- a/app/src/main/res/layout/activity_big_image.xml +++ b/app/src/main/res/layout/activity_big_image.xml @@ -2,36 +2,24 @@ - + android:layout_height="match_parent"> - - - + android:layout_height="match_parent" /> - - - - - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_check_detail.xml b/app/src/main/res/layout/activity_case_check_detail.xml index e2582a8..1b0ad33 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -81,12 +81,22 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_case_handle_detail.xml b/app/src/main/res/layout/activity_case_handle_detail.xml index f50dc55..ffe5638 100644 --- a/app/src/main/res/layout/activity_case_handle_detail.xml +++ b/app/src/main/res/layout/activity_case_handle_detail.xml @@ -42,12 +42,22 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index b6e913d..1a8331a 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -3,21 +3,21 @@ import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; +import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import androidx.core.content.ContextCompat; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; -import com.casic.dcms.base.BaseActivity; import com.luck.picture.lib.photoview.PhotoView; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; import org.jetbrains.annotations.NotNull; @@ -25,36 +25,26 @@ import java.util.List; import butterknife.BindView; +import butterknife.ButterKnife; -public class BigImageActivity extends BaseActivity { +public class BigImageActivity extends AppCompatActivity { - @BindView(R.id.topLayout) - QMUITopBarLayout topLayout; @BindView(R.id.imagePagerView) ViewPager imagePagerView; @BindView(R.id.pageNumberView) TextView pageNumberView; @Override - protected void setupTopBarLayout() { - topLayout.setTitle("查看大图").setTextColor(ContextCompat.getColor(this, R.color.white)); - topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - } + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_big_image); + ButterKnife.bind(this); - @Override - public int initLayoutView() { - return R.layout.activity_big_image; + initEvent(); } @SuppressLint("SetTextI18n") - @Override - public void initData() { + private void initEvent() { int index = getIntent().getIntExtra("index", 0); ArrayList urls = getIntent().getStringArrayListExtra("images"); if (urls == null || urls.size() == 0) { @@ -86,11 +76,6 @@ }); } - @Override - public void initEvent() { - - } - static class BigImageAdapter extends PagerAdapter { private Context context; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java index d4f61b1..a3b11d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -236,9 +239,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java index 2b65bb8..339e71f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -63,6 +64,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,18 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + //开始播放动画 + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + //结束播放动画 + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index da63f04..951b765 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -43,6 +43,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -99,6 +100,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -218,9 +221,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java index 443bcc5..a5be957 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -180,9 +183,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index 2bf82a6..ff4eef3 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -32,6 +32,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -61,6 +62,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -210,9 +213,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java index 5e8eee6..a4dae85 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -60,6 +61,8 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -156,9 +159,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index cf3e900..27d3a6f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -51,6 +51,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.iceteck.silicompressorr.SiliCompressor; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -110,6 +111,8 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -546,9 +549,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java index 926aecb..e27a310 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -24,6 +24,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; @@ -62,6 +63,8 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.caseAudioButton) QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) @@ -159,9 +162,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 509d0be..396c7fb 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -47,6 +47,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.VoicePlayView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -103,6 +104,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; + @BindView(R.id.voicePlayView) + VoicePlayView voicePlayView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -265,9 +268,16 @@ public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); + voicePlayView.start(); } } }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayView.stop(); + } + }); } //视频 diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java new file mode 100644 index 0000000..cedc830 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java @@ -0,0 +1,160 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.os.Handler; +import android.util.AttributeSet; +import android.view.View; + +import androidx.annotation.Nullable; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class VoicePlayView extends View { + + private static final String TAG = "VoicePlayView"; + private Paint paint; + //跳动指针的集合 + private List pointers = new ArrayList<>(); + private boolean isPlaying = false; + private Thread playThread; + private float basePointY; + //指针间的间隙 默认5dp + private float pointerPadding = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 3); + //每个指针的宽度 默认3dp + private float pointerWidth = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 5); + + public VoicePlayView(Context context) { + this(context, null); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public VoicePlayView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initConfig(context, attrs); + } + + private void initConfig(Context context, AttributeSet attrs) { + TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.VoicePlayView); + int color = typedArray.getColor(R.styleable.VoicePlayView_indicatorColor, Color.RED); + int indicatorNumber = typedArray.getInt(R.styleable.VoicePlayView_indicatorNumber, 10); + + paint = new Paint(); + paint.setAntiAlias(true); + paint.setColor(color); + + typedArray.recycle(); + + Random random = new Random(); + if (pointers != null) { + pointers.clear(); + } + for (int i = 0; i < indicatorNumber; i++) { + //创建指针对象,利用0~1的随机数 乘以 可绘制区域的高度。作为每个指针的初始高度。 + pointers.add(new Pointer((float) (0.1 * (random.nextInt(10) + 1) * (getHeight() - getPaddingBottom() - getPaddingTop())))); + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + //获取逻辑原点的,也就是画布左下角的坐标。这里减去了paddingBottom的距离 + basePointY = getHeight() - getPaddingBottom(); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //将x坐标移动到逻辑原点,也就是左下角 + float basePointX = 0f + getPaddingLeft(); + for (int i = 0; i < pointers.size(); i++) { + //绘制指针,也就是绘制矩形 + canvas.drawRect(basePointX, + basePointY - pointers.get(i).getHeight(), + basePointX + pointerWidth, + basePointY, + paint); + basePointX += (pointerPadding + pointerWidth); + } + } + + /** + * 开始播放 + */ + public void start() { + if (!isPlaying) { + if (playThread == null) {//开启子线程 + playThread = new Thread(new PlayRunnable()); + playThread.start(); + } + isPlaying = true;//控制子线程中的循环 + } + } + + /** + * 停止子线程,并刷新画布 + */ + public void stop() { + isPlaying = false; + invalidate(); + } + + /** + * 处理子线程发出来的指令,然后刷新布局 + */ + private Handler invalidateHandler = new Handler(msg -> { + invalidate(); + return false; + }); + + public class PlayRunnable implements Runnable { + + @Override + public void run() { + for (float i = 0; i < Integer.MAX_VALUE; ) {//创建一个死循环,每循环一次i+0.1 + try { + for (int j = 0; j < pointers.size(); j++) { //循环改变每个指针高度 + float rate = (float) Math.abs(Math.sin(i + j));//利用正弦有规律的获取0~1的数。 + pointers.get(j).setHeight((basePointY - getPaddingTop()) * rate); //rate 乘以 可绘制高度,来改变每个指针的高度 + } + Thread.sleep(40); + if (isPlaying) { //控制开始/暂停 + invalidateHandler.sendEmptyMessage(0); + i += 0.1; + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + + private static class Pointer { + private float height; + + Pointer(float height) { + this.height = height; + } + + public float getHeight() { + return height; + } + + public void setHeight(float height) { + this.height = height; + } + } +} diff --git a/app/src/main/res/layout/activity_big_image.xml b/app/src/main/res/layout/activity_big_image.xml index 54d8cb4..5bfb6f3 100644 --- a/app/src/main/res/layout/activity_big_image.xml +++ b/app/src/main/res/layout/activity_big_image.xml @@ -2,36 +2,24 @@ - + android:layout_height="match_parent"> - - - + android:layout_height="match_parent" /> - - - - - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_check_detail.xml b/app/src/main/res/layout/activity_case_check_detail.xml index e2582a8..1b0ad33 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -81,12 +81,22 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_case_handle_detail.xml b/app/src/main/res/layout/activity_case_handle_detail.xml index f50dc55..ffe5638 100644 --- a/app/src/main/res/layout/activity_case_handle_detail.xml +++ b/app/src/main/res/layout/activity_case_handle_detail.xml @@ -42,12 +42,22 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml new file mode 100644 index 0000000..c4b0fa6 --- /dev/null +++ b/app/src/main/res/values/attrs.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file