diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 8914a5d..af34e8f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,15 +60,12 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); @Override @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -149,30 +140,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -218,10 +187,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 8914a5d..af34e8f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,15 +60,12 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); @Override @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -149,30 +140,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -218,10 +187,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 daa7451..530a77e 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -48,7 +46,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -60,7 +58,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -95,8 +92,6 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseOpinionView) @@ -105,8 +100,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -140,7 +135,6 @@ private String gridId;//可能来自案卷详情,也可能来自地图选点 private double longitude, latitude; private String changeState; - private MediaPlayer mediaPlayer; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; private ArrayList realPaths = new ArrayList<>();//真实图片路径 @@ -162,7 +156,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -255,30 +248,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -688,10 +659,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 8914a5d..af34e8f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,15 +60,12 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); @Override @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -149,30 +140,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -218,10 +187,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 daa7451..530a77e 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -48,7 +46,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -60,7 +58,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -95,8 +92,6 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseOpinionView) @@ -105,8 +100,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -140,7 +135,6 @@ private String gridId;//可能来自案卷详情,也可能来自地图选点 private double longitude, latitude; private String changeState; - private MediaPlayer mediaPlayer; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; private ArrayList realPaths = new ArrayList<>();//真实图片路径 @@ -162,7 +156,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -255,30 +248,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -688,10 +659,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java new file mode 100644 index 0000000..f34a4d0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java @@ -0,0 +1,163 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.Handler; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; + +import androidx.annotation.DrawableRes; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; + +import java.io.IOException; + +public class AudioPlayerView extends AppCompatTextView { + + private static final int[] drawables = new int[]{R.drawable.ic_audio_icon1, R.drawable.ic_audio_icon2, R.drawable.ic_audio_icon3}; + private MediaPlayer mediaPlayer; + /** + * 在非初始化状态下调用setDataSource 会抛出IllegalStateException异常 + */ + private boolean hasPrepared = false; + private String mUrl; + private int index = 0; + private Handler audioAnimationHandler; + private Runnable animationRunnable; + + public AudioPlayerView(Context context, AttributeSet attrs) { + super(context, attrs); + initMediaPlayer(); + } + + private void initMediaPlayer() { + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + } catch (Exception e) { + Log.e("mediaPlayer", " init error", e); + } + if (mediaPlayer != null) { + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + hasPrepared = true; + setText(getAudioDuration()); + } + }); + mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + mp.reset(); + return false; + } + }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + stopAnimation(); + } + }); + } + setViewClick(); + } + + public String getAudioDuration() { + int duration = mediaPlayer.getDuration(); + if (duration == -1) { + return ""; + } else { + int sec = duration / 1000; + int m = sec / 60; + int s = sec % 60; + return m + ":" + s; + } + } + + public void setAudioUrl(String url) { + this.mUrl = url; + try { + mediaPlayer.setDataSource(url); + mediaPlayer.prepare(); + } catch (IOException | IllegalStateException e) { + Log.e("mediaPlayer", " set dataSource error", e); + } + } + + /** + * 用于需要设置不同的dataSource + * 二次setDataSource的时候需要reset 将MediaPlayer恢复到Initialized状态 + * + * @param url + */ + public void resetUrl(String url) { + if (TextUtils.isEmpty(mUrl) || hasPrepared) { + mediaPlayer.reset(); + } + setAudioUrl(url); + } + + private void startAnimation() { + if (audioAnimationHandler == null) { + audioAnimationHandler = new Handler(); + } + if (animationRunnable == null) { + animationRunnable = new Runnable() { + @Override + public void run() { + audioAnimationHandler.postDelayed(this, 200); + setDrawable(drawables[index % 3]); + index++; + } + }; + } + audioAnimationHandler.removeCallbacks(animationRunnable); + audioAnimationHandler.postDelayed(animationRunnable, 200); + } + + private void stopAnimation() { + setDrawable(drawables[2]); + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } + + //暂时只能设置在左边,后期改为可设置方向 + private void setDrawable(@DrawableRes int id) { + Drawable drawable = getResources().getDrawable(id); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + setCompoundDrawables(drawable, null, null, null); + } + + private void setViewClick() { + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + stopAnimation(); + } else { + mediaPlayer.seekTo(0); + startAnimation(); + mediaPlayer.start(); + } + } + }); + } + + public void release() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayer = null; + } + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 8914a5d..af34e8f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,15 +60,12 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); @Override @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -149,30 +140,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -218,10 +187,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 daa7451..530a77e 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -48,7 +46,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -60,7 +58,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -95,8 +92,6 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseOpinionView) @@ -105,8 +100,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -140,7 +135,6 @@ private String gridId;//可能来自案卷详情,也可能来自地图选点 private double longitude, latitude; private String changeState; - private MediaPlayer mediaPlayer; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; private ArrayList realPaths = new ArrayList<>();//真实图片路径 @@ -162,7 +156,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -255,30 +248,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -688,10 +659,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java new file mode 100644 index 0000000..f34a4d0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java @@ -0,0 +1,163 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.Handler; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; + +import androidx.annotation.DrawableRes; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; + +import java.io.IOException; + +public class AudioPlayerView extends AppCompatTextView { + + private static final int[] drawables = new int[]{R.drawable.ic_audio_icon1, R.drawable.ic_audio_icon2, R.drawable.ic_audio_icon3}; + private MediaPlayer mediaPlayer; + /** + * 在非初始化状态下调用setDataSource 会抛出IllegalStateException异常 + */ + private boolean hasPrepared = false; + private String mUrl; + private int index = 0; + private Handler audioAnimationHandler; + private Runnable animationRunnable; + + public AudioPlayerView(Context context, AttributeSet attrs) { + super(context, attrs); + initMediaPlayer(); + } + + private void initMediaPlayer() { + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + } catch (Exception e) { + Log.e("mediaPlayer", " init error", e); + } + if (mediaPlayer != null) { + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + hasPrepared = true; + setText(getAudioDuration()); + } + }); + mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + mp.reset(); + return false; + } + }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + stopAnimation(); + } + }); + } + setViewClick(); + } + + public String getAudioDuration() { + int duration = mediaPlayer.getDuration(); + if (duration == -1) { + return ""; + } else { + int sec = duration / 1000; + int m = sec / 60; + int s = sec % 60; + return m + ":" + s; + } + } + + public void setAudioUrl(String url) { + this.mUrl = url; + try { + mediaPlayer.setDataSource(url); + mediaPlayer.prepare(); + } catch (IOException | IllegalStateException e) { + Log.e("mediaPlayer", " set dataSource error", e); + } + } + + /** + * 用于需要设置不同的dataSource + * 二次setDataSource的时候需要reset 将MediaPlayer恢复到Initialized状态 + * + * @param url + */ + public void resetUrl(String url) { + if (TextUtils.isEmpty(mUrl) || hasPrepared) { + mediaPlayer.reset(); + } + setAudioUrl(url); + } + + private void startAnimation() { + if (audioAnimationHandler == null) { + audioAnimationHandler = new Handler(); + } + if (animationRunnable == null) { + animationRunnable = new Runnable() { + @Override + public void run() { + audioAnimationHandler.postDelayed(this, 200); + setDrawable(drawables[index % 3]); + index++; + } + }; + } + audioAnimationHandler.removeCallbacks(animationRunnable); + audioAnimationHandler.postDelayed(animationRunnable, 200); + } + + private void stopAnimation() { + setDrawable(drawables[2]); + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } + + //暂时只能设置在左边,后期改为可设置方向 + private void setDrawable(@DrawableRes int id) { + Drawable drawable = getResources().getDrawable(id); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + setCompoundDrawables(drawable, null, null, null); + } + + private void setViewClick() { + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + stopAnimation(); + } else { + mediaPlayer.seekTo(0); + startAnimation(); + mediaPlayer.start(); + } + } + }); + } + + public void release() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayer = null; + } + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java deleted file mode 100644 index cedc830..0000000 --- a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java +++ /dev/null @@ -1,160 +0,0 @@ -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/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 8914a5d..af34e8f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,15 +60,12 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); @Override @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -149,30 +140,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -218,10 +187,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 daa7451..530a77e 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -48,7 +46,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -60,7 +58,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -95,8 +92,6 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseOpinionView) @@ -105,8 +100,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -140,7 +135,6 @@ private String gridId;//可能来自案卷详情,也可能来自地图选点 private double longitude, latitude; private String changeState; - private MediaPlayer mediaPlayer; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; private ArrayList realPaths = new ArrayList<>();//真实图片路径 @@ -162,7 +156,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -255,30 +248,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -688,10 +659,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java new file mode 100644 index 0000000..f34a4d0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java @@ -0,0 +1,163 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.Handler; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; + +import androidx.annotation.DrawableRes; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; + +import java.io.IOException; + +public class AudioPlayerView extends AppCompatTextView { + + private static final int[] drawables = new int[]{R.drawable.ic_audio_icon1, R.drawable.ic_audio_icon2, R.drawable.ic_audio_icon3}; + private MediaPlayer mediaPlayer; + /** + * 在非初始化状态下调用setDataSource 会抛出IllegalStateException异常 + */ + private boolean hasPrepared = false; + private String mUrl; + private int index = 0; + private Handler audioAnimationHandler; + private Runnable animationRunnable; + + public AudioPlayerView(Context context, AttributeSet attrs) { + super(context, attrs); + initMediaPlayer(); + } + + private void initMediaPlayer() { + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + } catch (Exception e) { + Log.e("mediaPlayer", " init error", e); + } + if (mediaPlayer != null) { + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + hasPrepared = true; + setText(getAudioDuration()); + } + }); + mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + mp.reset(); + return false; + } + }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + stopAnimation(); + } + }); + } + setViewClick(); + } + + public String getAudioDuration() { + int duration = mediaPlayer.getDuration(); + if (duration == -1) { + return ""; + } else { + int sec = duration / 1000; + int m = sec / 60; + int s = sec % 60; + return m + ":" + s; + } + } + + public void setAudioUrl(String url) { + this.mUrl = url; + try { + mediaPlayer.setDataSource(url); + mediaPlayer.prepare(); + } catch (IOException | IllegalStateException e) { + Log.e("mediaPlayer", " set dataSource error", e); + } + } + + /** + * 用于需要设置不同的dataSource + * 二次setDataSource的时候需要reset 将MediaPlayer恢复到Initialized状态 + * + * @param url + */ + public void resetUrl(String url) { + if (TextUtils.isEmpty(mUrl) || hasPrepared) { + mediaPlayer.reset(); + } + setAudioUrl(url); + } + + private void startAnimation() { + if (audioAnimationHandler == null) { + audioAnimationHandler = new Handler(); + } + if (animationRunnable == null) { + animationRunnable = new Runnable() { + @Override + public void run() { + audioAnimationHandler.postDelayed(this, 200); + setDrawable(drawables[index % 3]); + index++; + } + }; + } + audioAnimationHandler.removeCallbacks(animationRunnable); + audioAnimationHandler.postDelayed(animationRunnable, 200); + } + + private void stopAnimation() { + setDrawable(drawables[2]); + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } + + //暂时只能设置在左边,后期改为可设置方向 + private void setDrawable(@DrawableRes int id) { + Drawable drawable = getResources().getDrawable(id); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + setCompoundDrawables(drawable, null, null, null); + } + + private void setViewClick() { + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + stopAnimation(); + } else { + mediaPlayer.seekTo(0); + startAnimation(); + mediaPlayer.start(); + } + } + }); + } + + public void release() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayer = null; + } + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java deleted file mode 100644 index cedc830..0000000 --- a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java +++ /dev/null @@ -1,160 +0,0 @@ -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/drawable/bg_audio_view.xml b/app/src/main/res/drawable/bg_audio_view.xml new file mode 100644 index 0000000..be7243e --- /dev/null +++ b/app/src/main/res/drawable/bg_audio_view.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 8914a5d..af34e8f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,15 +60,12 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); @Override @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -149,30 +140,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -218,10 +187,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 daa7451..530a77e 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -48,7 +46,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -60,7 +58,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -95,8 +92,6 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseOpinionView) @@ -105,8 +100,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -140,7 +135,6 @@ private String gridId;//可能来自案卷详情,也可能来自地图选点 private double longitude, latitude; private String changeState; - private MediaPlayer mediaPlayer; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; private ArrayList realPaths = new ArrayList<>();//真实图片路径 @@ -162,7 +156,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -255,30 +248,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -688,10 +659,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java new file mode 100644 index 0000000..f34a4d0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java @@ -0,0 +1,163 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.Handler; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; + +import androidx.annotation.DrawableRes; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; + +import java.io.IOException; + +public class AudioPlayerView extends AppCompatTextView { + + private static final int[] drawables = new int[]{R.drawable.ic_audio_icon1, R.drawable.ic_audio_icon2, R.drawable.ic_audio_icon3}; + private MediaPlayer mediaPlayer; + /** + * 在非初始化状态下调用setDataSource 会抛出IllegalStateException异常 + */ + private boolean hasPrepared = false; + private String mUrl; + private int index = 0; + private Handler audioAnimationHandler; + private Runnable animationRunnable; + + public AudioPlayerView(Context context, AttributeSet attrs) { + super(context, attrs); + initMediaPlayer(); + } + + private void initMediaPlayer() { + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + } catch (Exception e) { + Log.e("mediaPlayer", " init error", e); + } + if (mediaPlayer != null) { + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + hasPrepared = true; + setText(getAudioDuration()); + } + }); + mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + mp.reset(); + return false; + } + }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + stopAnimation(); + } + }); + } + setViewClick(); + } + + public String getAudioDuration() { + int duration = mediaPlayer.getDuration(); + if (duration == -1) { + return ""; + } else { + int sec = duration / 1000; + int m = sec / 60; + int s = sec % 60; + return m + ":" + s; + } + } + + public void setAudioUrl(String url) { + this.mUrl = url; + try { + mediaPlayer.setDataSource(url); + mediaPlayer.prepare(); + } catch (IOException | IllegalStateException e) { + Log.e("mediaPlayer", " set dataSource error", e); + } + } + + /** + * 用于需要设置不同的dataSource + * 二次setDataSource的时候需要reset 将MediaPlayer恢复到Initialized状态 + * + * @param url + */ + public void resetUrl(String url) { + if (TextUtils.isEmpty(mUrl) || hasPrepared) { + mediaPlayer.reset(); + } + setAudioUrl(url); + } + + private void startAnimation() { + if (audioAnimationHandler == null) { + audioAnimationHandler = new Handler(); + } + if (animationRunnable == null) { + animationRunnable = new Runnable() { + @Override + public void run() { + audioAnimationHandler.postDelayed(this, 200); + setDrawable(drawables[index % 3]); + index++; + } + }; + } + audioAnimationHandler.removeCallbacks(animationRunnable); + audioAnimationHandler.postDelayed(animationRunnable, 200); + } + + private void stopAnimation() { + setDrawable(drawables[2]); + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } + + //暂时只能设置在左边,后期改为可设置方向 + private void setDrawable(@DrawableRes int id) { + Drawable drawable = getResources().getDrawable(id); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + setCompoundDrawables(drawable, null, null, null); + } + + private void setViewClick() { + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + stopAnimation(); + } else { + mediaPlayer.seekTo(0); + startAnimation(); + mediaPlayer.start(); + } + } + }); + } + + public void release() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayer = null; + } + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java deleted file mode 100644 index cedc830..0000000 --- a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java +++ /dev/null @@ -1,160 +0,0 @@ -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/drawable/bg_audio_view.xml b/app/src/main/res/drawable/bg_audio_view.xml new file mode 100644 index 0000000..be7243e --- /dev/null +++ b/app/src/main/res/drawable/bg_audio_view.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_persuade_text.xml b/app/src/main/res/drawable/bg_pkg_persuade_text.xml deleted file mode 100644 index 29d4fe1..0000000 --- a/app/src/main/res/drawable/bg_pkg_persuade_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 8914a5d..af34e8f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,15 +60,12 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); @Override @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -149,30 +140,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -218,10 +187,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 daa7451..530a77e 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -48,7 +46,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -60,7 +58,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -95,8 +92,6 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseOpinionView) @@ -105,8 +100,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -140,7 +135,6 @@ private String gridId;//可能来自案卷详情,也可能来自地图选点 private double longitude, latitude; private String changeState; - private MediaPlayer mediaPlayer; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; private ArrayList realPaths = new ArrayList<>();//真实图片路径 @@ -162,7 +156,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -255,30 +248,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -688,10 +659,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java new file mode 100644 index 0000000..f34a4d0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java @@ -0,0 +1,163 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.Handler; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; + +import androidx.annotation.DrawableRes; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; + +import java.io.IOException; + +public class AudioPlayerView extends AppCompatTextView { + + private static final int[] drawables = new int[]{R.drawable.ic_audio_icon1, R.drawable.ic_audio_icon2, R.drawable.ic_audio_icon3}; + private MediaPlayer mediaPlayer; + /** + * 在非初始化状态下调用setDataSource 会抛出IllegalStateException异常 + */ + private boolean hasPrepared = false; + private String mUrl; + private int index = 0; + private Handler audioAnimationHandler; + private Runnable animationRunnable; + + public AudioPlayerView(Context context, AttributeSet attrs) { + super(context, attrs); + initMediaPlayer(); + } + + private void initMediaPlayer() { + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + } catch (Exception e) { + Log.e("mediaPlayer", " init error", e); + } + if (mediaPlayer != null) { + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + hasPrepared = true; + setText(getAudioDuration()); + } + }); + mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + mp.reset(); + return false; + } + }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + stopAnimation(); + } + }); + } + setViewClick(); + } + + public String getAudioDuration() { + int duration = mediaPlayer.getDuration(); + if (duration == -1) { + return ""; + } else { + int sec = duration / 1000; + int m = sec / 60; + int s = sec % 60; + return m + ":" + s; + } + } + + public void setAudioUrl(String url) { + this.mUrl = url; + try { + mediaPlayer.setDataSource(url); + mediaPlayer.prepare(); + } catch (IOException | IllegalStateException e) { + Log.e("mediaPlayer", " set dataSource error", e); + } + } + + /** + * 用于需要设置不同的dataSource + * 二次setDataSource的时候需要reset 将MediaPlayer恢复到Initialized状态 + * + * @param url + */ + public void resetUrl(String url) { + if (TextUtils.isEmpty(mUrl) || hasPrepared) { + mediaPlayer.reset(); + } + setAudioUrl(url); + } + + private void startAnimation() { + if (audioAnimationHandler == null) { + audioAnimationHandler = new Handler(); + } + if (animationRunnable == null) { + animationRunnable = new Runnable() { + @Override + public void run() { + audioAnimationHandler.postDelayed(this, 200); + setDrawable(drawables[index % 3]); + index++; + } + }; + } + audioAnimationHandler.removeCallbacks(animationRunnable); + audioAnimationHandler.postDelayed(animationRunnable, 200); + } + + private void stopAnimation() { + setDrawable(drawables[2]); + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } + + //暂时只能设置在左边,后期改为可设置方向 + private void setDrawable(@DrawableRes int id) { + Drawable drawable = getResources().getDrawable(id); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + setCompoundDrawables(drawable, null, null, null); + } + + private void setViewClick() { + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + stopAnimation(); + } else { + mediaPlayer.seekTo(0); + startAnimation(); + mediaPlayer.start(); + } + } + }); + } + + public void release() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayer = null; + } + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java deleted file mode 100644 index cedc830..0000000 --- a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java +++ /dev/null @@ -1,160 +0,0 @@ -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/drawable/bg_audio_view.xml b/app/src/main/res/drawable/bg_audio_view.xml new file mode 100644 index 0000000..be7243e --- /dev/null +++ b/app/src/main/res/drawable/bg_audio_view.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_persuade_text.xml b/app/src/main/res/drawable/bg_pkg_persuade_text.xml deleted file mode 100644 index 29d4fe1..0000000 --- a/app/src/main/res/drawable/bg_pkg_persuade_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_punish_text.xml b/app/src/main/res/drawable/bg_pkg_punish_text.xml deleted file mode 100644 index 91ad460..0000000 --- a/app/src/main/res/drawable/bg_pkg_punish_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 8914a5d..af34e8f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,15 +60,12 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); @Override @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -149,30 +140,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -218,10 +187,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 daa7451..530a77e 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -48,7 +46,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -60,7 +58,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -95,8 +92,6 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseOpinionView) @@ -105,8 +100,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -140,7 +135,6 @@ private String gridId;//可能来自案卷详情,也可能来自地图选点 private double longitude, latitude; private String changeState; - private MediaPlayer mediaPlayer; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; private ArrayList realPaths = new ArrayList<>();//真实图片路径 @@ -162,7 +156,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -255,30 +248,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -688,10 +659,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java new file mode 100644 index 0000000..f34a4d0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java @@ -0,0 +1,163 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.Handler; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; + +import androidx.annotation.DrawableRes; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; + +import java.io.IOException; + +public class AudioPlayerView extends AppCompatTextView { + + private static final int[] drawables = new int[]{R.drawable.ic_audio_icon1, R.drawable.ic_audio_icon2, R.drawable.ic_audio_icon3}; + private MediaPlayer mediaPlayer; + /** + * 在非初始化状态下调用setDataSource 会抛出IllegalStateException异常 + */ + private boolean hasPrepared = false; + private String mUrl; + private int index = 0; + private Handler audioAnimationHandler; + private Runnable animationRunnable; + + public AudioPlayerView(Context context, AttributeSet attrs) { + super(context, attrs); + initMediaPlayer(); + } + + private void initMediaPlayer() { + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + } catch (Exception e) { + Log.e("mediaPlayer", " init error", e); + } + if (mediaPlayer != null) { + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + hasPrepared = true; + setText(getAudioDuration()); + } + }); + mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + mp.reset(); + return false; + } + }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + stopAnimation(); + } + }); + } + setViewClick(); + } + + public String getAudioDuration() { + int duration = mediaPlayer.getDuration(); + if (duration == -1) { + return ""; + } else { + int sec = duration / 1000; + int m = sec / 60; + int s = sec % 60; + return m + ":" + s; + } + } + + public void setAudioUrl(String url) { + this.mUrl = url; + try { + mediaPlayer.setDataSource(url); + mediaPlayer.prepare(); + } catch (IOException | IllegalStateException e) { + Log.e("mediaPlayer", " set dataSource error", e); + } + } + + /** + * 用于需要设置不同的dataSource + * 二次setDataSource的时候需要reset 将MediaPlayer恢复到Initialized状态 + * + * @param url + */ + public void resetUrl(String url) { + if (TextUtils.isEmpty(mUrl) || hasPrepared) { + mediaPlayer.reset(); + } + setAudioUrl(url); + } + + private void startAnimation() { + if (audioAnimationHandler == null) { + audioAnimationHandler = new Handler(); + } + if (animationRunnable == null) { + animationRunnable = new Runnable() { + @Override + public void run() { + audioAnimationHandler.postDelayed(this, 200); + setDrawable(drawables[index % 3]); + index++; + } + }; + } + audioAnimationHandler.removeCallbacks(animationRunnable); + audioAnimationHandler.postDelayed(animationRunnable, 200); + } + + private void stopAnimation() { + setDrawable(drawables[2]); + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } + + //暂时只能设置在左边,后期改为可设置方向 + private void setDrawable(@DrawableRes int id) { + Drawable drawable = getResources().getDrawable(id); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + setCompoundDrawables(drawable, null, null, null); + } + + private void setViewClick() { + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + stopAnimation(); + } else { + mediaPlayer.seekTo(0); + startAnimation(); + mediaPlayer.start(); + } + } + }); + } + + public void release() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayer = null; + } + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java deleted file mode 100644 index cedc830..0000000 --- a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java +++ /dev/null @@ -1,160 +0,0 @@ -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/drawable/bg_audio_view.xml b/app/src/main/res/drawable/bg_audio_view.xml new file mode 100644 index 0000000..be7243e --- /dev/null +++ b/app/src/main/res/drawable/bg_audio_view.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_persuade_text.xml b/app/src/main/res/drawable/bg_pkg_persuade_text.xml deleted file mode 100644 index 29d4fe1..0000000 --- a/app/src/main/res/drawable/bg_pkg_persuade_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_punish_text.xml b/app/src/main/res/drawable/bg_pkg_punish_text.xml deleted file mode 100644 index 91ad460..0000000 --- a/app/src/main/res/drawable/bg_pkg_punish_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_warn_text.xml b/app/src/main/res/drawable/bg_pkg_warn_text.xml deleted file mode 100644 index b9cc363..0000000 --- a/app/src/main/res/drawable/bg_pkg_warn_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 8914a5d..af34e8f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,15 +60,12 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); @Override @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -149,30 +140,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -218,10 +187,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 daa7451..530a77e 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -48,7 +46,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -60,7 +58,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -95,8 +92,6 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseOpinionView) @@ -105,8 +100,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -140,7 +135,6 @@ private String gridId;//可能来自案卷详情,也可能来自地图选点 private double longitude, latitude; private String changeState; - private MediaPlayer mediaPlayer; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; private ArrayList realPaths = new ArrayList<>();//真实图片路径 @@ -162,7 +156,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -255,30 +248,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -688,10 +659,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java new file mode 100644 index 0000000..f34a4d0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java @@ -0,0 +1,163 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.Handler; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; + +import androidx.annotation.DrawableRes; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; + +import java.io.IOException; + +public class AudioPlayerView extends AppCompatTextView { + + private static final int[] drawables = new int[]{R.drawable.ic_audio_icon1, R.drawable.ic_audio_icon2, R.drawable.ic_audio_icon3}; + private MediaPlayer mediaPlayer; + /** + * 在非初始化状态下调用setDataSource 会抛出IllegalStateException异常 + */ + private boolean hasPrepared = false; + private String mUrl; + private int index = 0; + private Handler audioAnimationHandler; + private Runnable animationRunnable; + + public AudioPlayerView(Context context, AttributeSet attrs) { + super(context, attrs); + initMediaPlayer(); + } + + private void initMediaPlayer() { + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + } catch (Exception e) { + Log.e("mediaPlayer", " init error", e); + } + if (mediaPlayer != null) { + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + hasPrepared = true; + setText(getAudioDuration()); + } + }); + mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + mp.reset(); + return false; + } + }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + stopAnimation(); + } + }); + } + setViewClick(); + } + + public String getAudioDuration() { + int duration = mediaPlayer.getDuration(); + if (duration == -1) { + return ""; + } else { + int sec = duration / 1000; + int m = sec / 60; + int s = sec % 60; + return m + ":" + s; + } + } + + public void setAudioUrl(String url) { + this.mUrl = url; + try { + mediaPlayer.setDataSource(url); + mediaPlayer.prepare(); + } catch (IOException | IllegalStateException e) { + Log.e("mediaPlayer", " set dataSource error", e); + } + } + + /** + * 用于需要设置不同的dataSource + * 二次setDataSource的时候需要reset 将MediaPlayer恢复到Initialized状态 + * + * @param url + */ + public void resetUrl(String url) { + if (TextUtils.isEmpty(mUrl) || hasPrepared) { + mediaPlayer.reset(); + } + setAudioUrl(url); + } + + private void startAnimation() { + if (audioAnimationHandler == null) { + audioAnimationHandler = new Handler(); + } + if (animationRunnable == null) { + animationRunnable = new Runnable() { + @Override + public void run() { + audioAnimationHandler.postDelayed(this, 200); + setDrawable(drawables[index % 3]); + index++; + } + }; + } + audioAnimationHandler.removeCallbacks(animationRunnable); + audioAnimationHandler.postDelayed(animationRunnable, 200); + } + + private void stopAnimation() { + setDrawable(drawables[2]); + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } + + //暂时只能设置在左边,后期改为可设置方向 + private void setDrawable(@DrawableRes int id) { + Drawable drawable = getResources().getDrawable(id); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + setCompoundDrawables(drawable, null, null, null); + } + + private void setViewClick() { + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + stopAnimation(); + } else { + mediaPlayer.seekTo(0); + startAnimation(); + mediaPlayer.start(); + } + } + }); + } + + public void release() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayer = null; + } + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java deleted file mode 100644 index cedc830..0000000 --- a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java +++ /dev/null @@ -1,160 +0,0 @@ -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/drawable/bg_audio_view.xml b/app/src/main/res/drawable/bg_audio_view.xml new file mode 100644 index 0000000..be7243e --- /dev/null +++ b/app/src/main/res/drawable/bg_audio_view.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_persuade_text.xml b/app/src/main/res/drawable/bg_pkg_persuade_text.xml deleted file mode 100644 index 29d4fe1..0000000 --- a/app/src/main/res/drawable/bg_pkg_persuade_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_punish_text.xml b/app/src/main/res/drawable/bg_pkg_punish_text.xml deleted file mode 100644 index 91ad460..0000000 --- a/app/src/main/res/drawable/bg_pkg_punish_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_warn_text.xml b/app/src/main/res/drawable/bg_pkg_warn_text.xml deleted file mode 100644 index b9cc363..0000000 --- a/app/src/main/res/drawable/bg_pkg_warn_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_audio_icon1.xml b/app/src/main/res/drawable/ic_audio_icon1.xml new file mode 100644 index 0000000..d31400e --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon1.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 8914a5d..af34e8f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,15 +60,12 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); @Override @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -149,30 +140,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -218,10 +187,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 daa7451..530a77e 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -48,7 +46,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -60,7 +58,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -95,8 +92,6 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseOpinionView) @@ -105,8 +100,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -140,7 +135,6 @@ private String gridId;//可能来自案卷详情,也可能来自地图选点 private double longitude, latitude; private String changeState; - private MediaPlayer mediaPlayer; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; private ArrayList realPaths = new ArrayList<>();//真实图片路径 @@ -162,7 +156,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -255,30 +248,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -688,10 +659,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java new file mode 100644 index 0000000..f34a4d0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java @@ -0,0 +1,163 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.Handler; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; + +import androidx.annotation.DrawableRes; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; + +import java.io.IOException; + +public class AudioPlayerView extends AppCompatTextView { + + private static final int[] drawables = new int[]{R.drawable.ic_audio_icon1, R.drawable.ic_audio_icon2, R.drawable.ic_audio_icon3}; + private MediaPlayer mediaPlayer; + /** + * 在非初始化状态下调用setDataSource 会抛出IllegalStateException异常 + */ + private boolean hasPrepared = false; + private String mUrl; + private int index = 0; + private Handler audioAnimationHandler; + private Runnable animationRunnable; + + public AudioPlayerView(Context context, AttributeSet attrs) { + super(context, attrs); + initMediaPlayer(); + } + + private void initMediaPlayer() { + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + } catch (Exception e) { + Log.e("mediaPlayer", " init error", e); + } + if (mediaPlayer != null) { + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + hasPrepared = true; + setText(getAudioDuration()); + } + }); + mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + mp.reset(); + return false; + } + }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + stopAnimation(); + } + }); + } + setViewClick(); + } + + public String getAudioDuration() { + int duration = mediaPlayer.getDuration(); + if (duration == -1) { + return ""; + } else { + int sec = duration / 1000; + int m = sec / 60; + int s = sec % 60; + return m + ":" + s; + } + } + + public void setAudioUrl(String url) { + this.mUrl = url; + try { + mediaPlayer.setDataSource(url); + mediaPlayer.prepare(); + } catch (IOException | IllegalStateException e) { + Log.e("mediaPlayer", " set dataSource error", e); + } + } + + /** + * 用于需要设置不同的dataSource + * 二次setDataSource的时候需要reset 将MediaPlayer恢复到Initialized状态 + * + * @param url + */ + public void resetUrl(String url) { + if (TextUtils.isEmpty(mUrl) || hasPrepared) { + mediaPlayer.reset(); + } + setAudioUrl(url); + } + + private void startAnimation() { + if (audioAnimationHandler == null) { + audioAnimationHandler = new Handler(); + } + if (animationRunnable == null) { + animationRunnable = new Runnable() { + @Override + public void run() { + audioAnimationHandler.postDelayed(this, 200); + setDrawable(drawables[index % 3]); + index++; + } + }; + } + audioAnimationHandler.removeCallbacks(animationRunnable); + audioAnimationHandler.postDelayed(animationRunnable, 200); + } + + private void stopAnimation() { + setDrawable(drawables[2]); + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } + + //暂时只能设置在左边,后期改为可设置方向 + private void setDrawable(@DrawableRes int id) { + Drawable drawable = getResources().getDrawable(id); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + setCompoundDrawables(drawable, null, null, null); + } + + private void setViewClick() { + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + stopAnimation(); + } else { + mediaPlayer.seekTo(0); + startAnimation(); + mediaPlayer.start(); + } + } + }); + } + + public void release() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayer = null; + } + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java deleted file mode 100644 index cedc830..0000000 --- a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java +++ /dev/null @@ -1,160 +0,0 @@ -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/drawable/bg_audio_view.xml b/app/src/main/res/drawable/bg_audio_view.xml new file mode 100644 index 0000000..be7243e --- /dev/null +++ b/app/src/main/res/drawable/bg_audio_view.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_persuade_text.xml b/app/src/main/res/drawable/bg_pkg_persuade_text.xml deleted file mode 100644 index 29d4fe1..0000000 --- a/app/src/main/res/drawable/bg_pkg_persuade_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_punish_text.xml b/app/src/main/res/drawable/bg_pkg_punish_text.xml deleted file mode 100644 index 91ad460..0000000 --- a/app/src/main/res/drawable/bg_pkg_punish_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_warn_text.xml b/app/src/main/res/drawable/bg_pkg_warn_text.xml deleted file mode 100644 index b9cc363..0000000 --- a/app/src/main/res/drawable/bg_pkg_warn_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_audio_icon1.xml b/app/src/main/res/drawable/ic_audio_icon1.xml new file mode 100644 index 0000000..d31400e --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon1.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_audio_icon2.xml b/app/src/main/res/drawable/ic_audio_icon2.xml new file mode 100644 index 0000000..3abf4b5 --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon2.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 8914a5d..af34e8f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,15 +60,12 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); @Override @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -149,30 +140,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -218,10 +187,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 daa7451..530a77e 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -48,7 +46,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -60,7 +58,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -95,8 +92,6 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseOpinionView) @@ -105,8 +100,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -140,7 +135,6 @@ private String gridId;//可能来自案卷详情,也可能来自地图选点 private double longitude, latitude; private String changeState; - private MediaPlayer mediaPlayer; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; private ArrayList realPaths = new ArrayList<>();//真实图片路径 @@ -162,7 +156,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -255,30 +248,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -688,10 +659,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java new file mode 100644 index 0000000..f34a4d0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java @@ -0,0 +1,163 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.Handler; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; + +import androidx.annotation.DrawableRes; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; + +import java.io.IOException; + +public class AudioPlayerView extends AppCompatTextView { + + private static final int[] drawables = new int[]{R.drawable.ic_audio_icon1, R.drawable.ic_audio_icon2, R.drawable.ic_audio_icon3}; + private MediaPlayer mediaPlayer; + /** + * 在非初始化状态下调用setDataSource 会抛出IllegalStateException异常 + */ + private boolean hasPrepared = false; + private String mUrl; + private int index = 0; + private Handler audioAnimationHandler; + private Runnable animationRunnable; + + public AudioPlayerView(Context context, AttributeSet attrs) { + super(context, attrs); + initMediaPlayer(); + } + + private void initMediaPlayer() { + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + } catch (Exception e) { + Log.e("mediaPlayer", " init error", e); + } + if (mediaPlayer != null) { + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + hasPrepared = true; + setText(getAudioDuration()); + } + }); + mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + mp.reset(); + return false; + } + }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + stopAnimation(); + } + }); + } + setViewClick(); + } + + public String getAudioDuration() { + int duration = mediaPlayer.getDuration(); + if (duration == -1) { + return ""; + } else { + int sec = duration / 1000; + int m = sec / 60; + int s = sec % 60; + return m + ":" + s; + } + } + + public void setAudioUrl(String url) { + this.mUrl = url; + try { + mediaPlayer.setDataSource(url); + mediaPlayer.prepare(); + } catch (IOException | IllegalStateException e) { + Log.e("mediaPlayer", " set dataSource error", e); + } + } + + /** + * 用于需要设置不同的dataSource + * 二次setDataSource的时候需要reset 将MediaPlayer恢复到Initialized状态 + * + * @param url + */ + public void resetUrl(String url) { + if (TextUtils.isEmpty(mUrl) || hasPrepared) { + mediaPlayer.reset(); + } + setAudioUrl(url); + } + + private void startAnimation() { + if (audioAnimationHandler == null) { + audioAnimationHandler = new Handler(); + } + if (animationRunnable == null) { + animationRunnable = new Runnable() { + @Override + public void run() { + audioAnimationHandler.postDelayed(this, 200); + setDrawable(drawables[index % 3]); + index++; + } + }; + } + audioAnimationHandler.removeCallbacks(animationRunnable); + audioAnimationHandler.postDelayed(animationRunnable, 200); + } + + private void stopAnimation() { + setDrawable(drawables[2]); + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } + + //暂时只能设置在左边,后期改为可设置方向 + private void setDrawable(@DrawableRes int id) { + Drawable drawable = getResources().getDrawable(id); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + setCompoundDrawables(drawable, null, null, null); + } + + private void setViewClick() { + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + stopAnimation(); + } else { + mediaPlayer.seekTo(0); + startAnimation(); + mediaPlayer.start(); + } + } + }); + } + + public void release() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayer = null; + } + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java deleted file mode 100644 index cedc830..0000000 --- a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java +++ /dev/null @@ -1,160 +0,0 @@ -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/drawable/bg_audio_view.xml b/app/src/main/res/drawable/bg_audio_view.xml new file mode 100644 index 0000000..be7243e --- /dev/null +++ b/app/src/main/res/drawable/bg_audio_view.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_persuade_text.xml b/app/src/main/res/drawable/bg_pkg_persuade_text.xml deleted file mode 100644 index 29d4fe1..0000000 --- a/app/src/main/res/drawable/bg_pkg_persuade_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_punish_text.xml b/app/src/main/res/drawable/bg_pkg_punish_text.xml deleted file mode 100644 index 91ad460..0000000 --- a/app/src/main/res/drawable/bg_pkg_punish_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_warn_text.xml b/app/src/main/res/drawable/bg_pkg_warn_text.xml deleted file mode 100644 index b9cc363..0000000 --- a/app/src/main/res/drawable/bg_pkg_warn_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_audio_icon1.xml b/app/src/main/res/drawable/ic_audio_icon1.xml new file mode 100644 index 0000000..d31400e --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon1.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_audio_icon2.xml b/app/src/main/res/drawable/ic_audio_icon2.xml new file mode 100644 index 0000000..3abf4b5 --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon2.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_audio_icon3.xml b/app/src/main/res/drawable/ic_audio_icon3.xml new file mode 100644 index 0000000..848e68b --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon3.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 8914a5d..af34e8f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,15 +60,12 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); @Override @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -149,30 +140,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -218,10 +187,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 daa7451..530a77e 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -48,7 +46,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -60,7 +58,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -95,8 +92,6 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseOpinionView) @@ -105,8 +100,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -140,7 +135,6 @@ private String gridId;//可能来自案卷详情,也可能来自地图选点 private double longitude, latitude; private String changeState; - private MediaPlayer mediaPlayer; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; private ArrayList realPaths = new ArrayList<>();//真实图片路径 @@ -162,7 +156,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -255,30 +248,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -688,10 +659,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java new file mode 100644 index 0000000..f34a4d0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java @@ -0,0 +1,163 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.Handler; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; + +import androidx.annotation.DrawableRes; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; + +import java.io.IOException; + +public class AudioPlayerView extends AppCompatTextView { + + private static final int[] drawables = new int[]{R.drawable.ic_audio_icon1, R.drawable.ic_audio_icon2, R.drawable.ic_audio_icon3}; + private MediaPlayer mediaPlayer; + /** + * 在非初始化状态下调用setDataSource 会抛出IllegalStateException异常 + */ + private boolean hasPrepared = false; + private String mUrl; + private int index = 0; + private Handler audioAnimationHandler; + private Runnable animationRunnable; + + public AudioPlayerView(Context context, AttributeSet attrs) { + super(context, attrs); + initMediaPlayer(); + } + + private void initMediaPlayer() { + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + } catch (Exception e) { + Log.e("mediaPlayer", " init error", e); + } + if (mediaPlayer != null) { + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + hasPrepared = true; + setText(getAudioDuration()); + } + }); + mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + mp.reset(); + return false; + } + }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + stopAnimation(); + } + }); + } + setViewClick(); + } + + public String getAudioDuration() { + int duration = mediaPlayer.getDuration(); + if (duration == -1) { + return ""; + } else { + int sec = duration / 1000; + int m = sec / 60; + int s = sec % 60; + return m + ":" + s; + } + } + + public void setAudioUrl(String url) { + this.mUrl = url; + try { + mediaPlayer.setDataSource(url); + mediaPlayer.prepare(); + } catch (IOException | IllegalStateException e) { + Log.e("mediaPlayer", " set dataSource error", e); + } + } + + /** + * 用于需要设置不同的dataSource + * 二次setDataSource的时候需要reset 将MediaPlayer恢复到Initialized状态 + * + * @param url + */ + public void resetUrl(String url) { + if (TextUtils.isEmpty(mUrl) || hasPrepared) { + mediaPlayer.reset(); + } + setAudioUrl(url); + } + + private void startAnimation() { + if (audioAnimationHandler == null) { + audioAnimationHandler = new Handler(); + } + if (animationRunnable == null) { + animationRunnable = new Runnable() { + @Override + public void run() { + audioAnimationHandler.postDelayed(this, 200); + setDrawable(drawables[index % 3]); + index++; + } + }; + } + audioAnimationHandler.removeCallbacks(animationRunnable); + audioAnimationHandler.postDelayed(animationRunnable, 200); + } + + private void stopAnimation() { + setDrawable(drawables[2]); + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } + + //暂时只能设置在左边,后期改为可设置方向 + private void setDrawable(@DrawableRes int id) { + Drawable drawable = getResources().getDrawable(id); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + setCompoundDrawables(drawable, null, null, null); + } + + private void setViewClick() { + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + stopAnimation(); + } else { + mediaPlayer.seekTo(0); + startAnimation(); + mediaPlayer.start(); + } + } + }); + } + + public void release() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayer = null; + } + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java deleted file mode 100644 index cedc830..0000000 --- a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java +++ /dev/null @@ -1,160 +0,0 @@ -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/drawable/bg_audio_view.xml b/app/src/main/res/drawable/bg_audio_view.xml new file mode 100644 index 0000000..be7243e --- /dev/null +++ b/app/src/main/res/drawable/bg_audio_view.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_persuade_text.xml b/app/src/main/res/drawable/bg_pkg_persuade_text.xml deleted file mode 100644 index 29d4fe1..0000000 --- a/app/src/main/res/drawable/bg_pkg_persuade_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_punish_text.xml b/app/src/main/res/drawable/bg_pkg_punish_text.xml deleted file mode 100644 index 91ad460..0000000 --- a/app/src/main/res/drawable/bg_pkg_punish_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_warn_text.xml b/app/src/main/res/drawable/bg_pkg_warn_text.xml deleted file mode 100644 index b9cc363..0000000 --- a/app/src/main/res/drawable/bg_pkg_warn_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_audio_icon1.xml b/app/src/main/res/drawable/ic_audio_icon1.xml new file mode 100644 index 0000000..d31400e --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon1.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_audio_icon2.xml b/app/src/main/res/drawable/ic_audio_icon2.xml new file mode 100644 index 0000000..3abf4b5 --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon2.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_audio_icon3.xml b/app/src/main/res/drawable/ic_audio_icon3.xml new file mode 100644 index 0000000..848e68b --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon3.xml @@ -0,0 +1,15 @@ + + + + + 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 d5be6a9..1d21c58 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -65,26 +65,10 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 8914a5d..af34e8f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,15 +60,12 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); @Override @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -149,30 +140,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -218,10 +187,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 daa7451..530a77e 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -48,7 +46,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -60,7 +58,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -95,8 +92,6 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseOpinionView) @@ -105,8 +100,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -140,7 +135,6 @@ private String gridId;//可能来自案卷详情,也可能来自地图选点 private double longitude, latitude; private String changeState; - private MediaPlayer mediaPlayer; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; private ArrayList realPaths = new ArrayList<>();//真实图片路径 @@ -162,7 +156,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -255,30 +248,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -688,10 +659,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java new file mode 100644 index 0000000..f34a4d0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java @@ -0,0 +1,163 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.Handler; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; + +import androidx.annotation.DrawableRes; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; + +import java.io.IOException; + +public class AudioPlayerView extends AppCompatTextView { + + private static final int[] drawables = new int[]{R.drawable.ic_audio_icon1, R.drawable.ic_audio_icon2, R.drawable.ic_audio_icon3}; + private MediaPlayer mediaPlayer; + /** + * 在非初始化状态下调用setDataSource 会抛出IllegalStateException异常 + */ + private boolean hasPrepared = false; + private String mUrl; + private int index = 0; + private Handler audioAnimationHandler; + private Runnable animationRunnable; + + public AudioPlayerView(Context context, AttributeSet attrs) { + super(context, attrs); + initMediaPlayer(); + } + + private void initMediaPlayer() { + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + } catch (Exception e) { + Log.e("mediaPlayer", " init error", e); + } + if (mediaPlayer != null) { + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + hasPrepared = true; + setText(getAudioDuration()); + } + }); + mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + mp.reset(); + return false; + } + }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + stopAnimation(); + } + }); + } + setViewClick(); + } + + public String getAudioDuration() { + int duration = mediaPlayer.getDuration(); + if (duration == -1) { + return ""; + } else { + int sec = duration / 1000; + int m = sec / 60; + int s = sec % 60; + return m + ":" + s; + } + } + + public void setAudioUrl(String url) { + this.mUrl = url; + try { + mediaPlayer.setDataSource(url); + mediaPlayer.prepare(); + } catch (IOException | IllegalStateException e) { + Log.e("mediaPlayer", " set dataSource error", e); + } + } + + /** + * 用于需要设置不同的dataSource + * 二次setDataSource的时候需要reset 将MediaPlayer恢复到Initialized状态 + * + * @param url + */ + public void resetUrl(String url) { + if (TextUtils.isEmpty(mUrl) || hasPrepared) { + mediaPlayer.reset(); + } + setAudioUrl(url); + } + + private void startAnimation() { + if (audioAnimationHandler == null) { + audioAnimationHandler = new Handler(); + } + if (animationRunnable == null) { + animationRunnable = new Runnable() { + @Override + public void run() { + audioAnimationHandler.postDelayed(this, 200); + setDrawable(drawables[index % 3]); + index++; + } + }; + } + audioAnimationHandler.removeCallbacks(animationRunnable); + audioAnimationHandler.postDelayed(animationRunnable, 200); + } + + private void stopAnimation() { + setDrawable(drawables[2]); + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } + + //暂时只能设置在左边,后期改为可设置方向 + private void setDrawable(@DrawableRes int id) { + Drawable drawable = getResources().getDrawable(id); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + setCompoundDrawables(drawable, null, null, null); + } + + private void setViewClick() { + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + stopAnimation(); + } else { + mediaPlayer.seekTo(0); + startAnimation(); + mediaPlayer.start(); + } + } + }); + } + + public void release() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayer = null; + } + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java deleted file mode 100644 index cedc830..0000000 --- a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java +++ /dev/null @@ -1,160 +0,0 @@ -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/drawable/bg_audio_view.xml b/app/src/main/res/drawable/bg_audio_view.xml new file mode 100644 index 0000000..be7243e --- /dev/null +++ b/app/src/main/res/drawable/bg_audio_view.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_persuade_text.xml b/app/src/main/res/drawable/bg_pkg_persuade_text.xml deleted file mode 100644 index 29d4fe1..0000000 --- a/app/src/main/res/drawable/bg_pkg_persuade_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_punish_text.xml b/app/src/main/res/drawable/bg_pkg_punish_text.xml deleted file mode 100644 index 91ad460..0000000 --- a/app/src/main/res/drawable/bg_pkg_punish_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_warn_text.xml b/app/src/main/res/drawable/bg_pkg_warn_text.xml deleted file mode 100644 index b9cc363..0000000 --- a/app/src/main/res/drawable/bg_pkg_warn_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_audio_icon1.xml b/app/src/main/res/drawable/ic_audio_icon1.xml new file mode 100644 index 0000000..d31400e --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon1.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_audio_icon2.xml b/app/src/main/res/drawable/ic_audio_icon2.xml new file mode 100644 index 0000000..3abf4b5 --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon2.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_audio_icon3.xml b/app/src/main/res/drawable/ic_audio_icon3.xml new file mode 100644 index 0000000..848e68b --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon3.xml @@ -0,0 +1,15 @@ + + + + + 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 d5be6a9..1d21c58 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -65,26 +65,10 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_checked_detail.xml b/app/src/main/res/layout/activity_case_checked_detail.xml index ffc6e7d..653b8a1 100644 --- a/app/src/main/res/layout/activity_case_checked_detail.xml +++ b/app/src/main/res/layout/activity_case_checked_detail.xml @@ -1,6 +1,5 @@ @@ -69,26 +68,10 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 8914a5d..af34e8f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,15 +60,12 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); @Override @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -149,30 +140,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -218,10 +187,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 daa7451..530a77e 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -48,7 +46,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -60,7 +58,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -95,8 +92,6 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseOpinionView) @@ -105,8 +100,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -140,7 +135,6 @@ private String gridId;//可能来自案卷详情,也可能来自地图选点 private double longitude, latitude; private String changeState; - private MediaPlayer mediaPlayer; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; private ArrayList realPaths = new ArrayList<>();//真实图片路径 @@ -162,7 +156,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -255,30 +248,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -688,10 +659,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java new file mode 100644 index 0000000..f34a4d0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java @@ -0,0 +1,163 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.Handler; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; + +import androidx.annotation.DrawableRes; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; + +import java.io.IOException; + +public class AudioPlayerView extends AppCompatTextView { + + private static final int[] drawables = new int[]{R.drawable.ic_audio_icon1, R.drawable.ic_audio_icon2, R.drawable.ic_audio_icon3}; + private MediaPlayer mediaPlayer; + /** + * 在非初始化状态下调用setDataSource 会抛出IllegalStateException异常 + */ + private boolean hasPrepared = false; + private String mUrl; + private int index = 0; + private Handler audioAnimationHandler; + private Runnable animationRunnable; + + public AudioPlayerView(Context context, AttributeSet attrs) { + super(context, attrs); + initMediaPlayer(); + } + + private void initMediaPlayer() { + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + } catch (Exception e) { + Log.e("mediaPlayer", " init error", e); + } + if (mediaPlayer != null) { + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + hasPrepared = true; + setText(getAudioDuration()); + } + }); + mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + mp.reset(); + return false; + } + }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + stopAnimation(); + } + }); + } + setViewClick(); + } + + public String getAudioDuration() { + int duration = mediaPlayer.getDuration(); + if (duration == -1) { + return ""; + } else { + int sec = duration / 1000; + int m = sec / 60; + int s = sec % 60; + return m + ":" + s; + } + } + + public void setAudioUrl(String url) { + this.mUrl = url; + try { + mediaPlayer.setDataSource(url); + mediaPlayer.prepare(); + } catch (IOException | IllegalStateException e) { + Log.e("mediaPlayer", " set dataSource error", e); + } + } + + /** + * 用于需要设置不同的dataSource + * 二次setDataSource的时候需要reset 将MediaPlayer恢复到Initialized状态 + * + * @param url + */ + public void resetUrl(String url) { + if (TextUtils.isEmpty(mUrl) || hasPrepared) { + mediaPlayer.reset(); + } + setAudioUrl(url); + } + + private void startAnimation() { + if (audioAnimationHandler == null) { + audioAnimationHandler = new Handler(); + } + if (animationRunnable == null) { + animationRunnable = new Runnable() { + @Override + public void run() { + audioAnimationHandler.postDelayed(this, 200); + setDrawable(drawables[index % 3]); + index++; + } + }; + } + audioAnimationHandler.removeCallbacks(animationRunnable); + audioAnimationHandler.postDelayed(animationRunnable, 200); + } + + private void stopAnimation() { + setDrawable(drawables[2]); + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } + + //暂时只能设置在左边,后期改为可设置方向 + private void setDrawable(@DrawableRes int id) { + Drawable drawable = getResources().getDrawable(id); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + setCompoundDrawables(drawable, null, null, null); + } + + private void setViewClick() { + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + stopAnimation(); + } else { + mediaPlayer.seekTo(0); + startAnimation(); + mediaPlayer.start(); + } + } + }); + } + + public void release() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayer = null; + } + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java deleted file mode 100644 index cedc830..0000000 --- a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java +++ /dev/null @@ -1,160 +0,0 @@ -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/drawable/bg_audio_view.xml b/app/src/main/res/drawable/bg_audio_view.xml new file mode 100644 index 0000000..be7243e --- /dev/null +++ b/app/src/main/res/drawable/bg_audio_view.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_persuade_text.xml b/app/src/main/res/drawable/bg_pkg_persuade_text.xml deleted file mode 100644 index 29d4fe1..0000000 --- a/app/src/main/res/drawable/bg_pkg_persuade_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_punish_text.xml b/app/src/main/res/drawable/bg_pkg_punish_text.xml deleted file mode 100644 index 91ad460..0000000 --- a/app/src/main/res/drawable/bg_pkg_punish_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_warn_text.xml b/app/src/main/res/drawable/bg_pkg_warn_text.xml deleted file mode 100644 index b9cc363..0000000 --- a/app/src/main/res/drawable/bg_pkg_warn_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_audio_icon1.xml b/app/src/main/res/drawable/ic_audio_icon1.xml new file mode 100644 index 0000000..d31400e --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon1.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_audio_icon2.xml b/app/src/main/res/drawable/ic_audio_icon2.xml new file mode 100644 index 0000000..3abf4b5 --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon2.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_audio_icon3.xml b/app/src/main/res/drawable/ic_audio_icon3.xml new file mode 100644 index 0000000..848e68b --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon3.xml @@ -0,0 +1,15 @@ + + + + + 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 d5be6a9..1d21c58 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -65,26 +65,10 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_checked_detail.xml b/app/src/main/res/layout/activity_case_checked_detail.xml index ffc6e7d..653b8a1 100644 --- a/app/src/main/res/layout/activity_case_checked_detail.xml +++ b/app/src/main/res/layout/activity_case_checked_detail.xml @@ -1,6 +1,5 @@ @@ -69,26 +68,10 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_detail.xml b/app/src/main/res/layout/activity_case_detail.xml index 97ab7c6..e754c14 100644 --- a/app/src/main/res/layout/activity_case_detail.xml +++ b/app/src/main/res/layout/activity_case_detail.xml @@ -1,6 +1,5 @@ - - - + diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 8914a5d..af34e8f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,15 +60,12 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); @Override @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -149,30 +140,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -218,10 +187,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 daa7451..530a77e 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -48,7 +46,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -60,7 +58,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -95,8 +92,6 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseOpinionView) @@ -105,8 +100,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -140,7 +135,6 @@ private String gridId;//可能来自案卷详情,也可能来自地图选点 private double longitude, latitude; private String changeState; - private MediaPlayer mediaPlayer; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; private ArrayList realPaths = new ArrayList<>();//真实图片路径 @@ -162,7 +156,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -255,30 +248,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -688,10 +659,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java new file mode 100644 index 0000000..f34a4d0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java @@ -0,0 +1,163 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.Handler; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; + +import androidx.annotation.DrawableRes; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; + +import java.io.IOException; + +public class AudioPlayerView extends AppCompatTextView { + + private static final int[] drawables = new int[]{R.drawable.ic_audio_icon1, R.drawable.ic_audio_icon2, R.drawable.ic_audio_icon3}; + private MediaPlayer mediaPlayer; + /** + * 在非初始化状态下调用setDataSource 会抛出IllegalStateException异常 + */ + private boolean hasPrepared = false; + private String mUrl; + private int index = 0; + private Handler audioAnimationHandler; + private Runnable animationRunnable; + + public AudioPlayerView(Context context, AttributeSet attrs) { + super(context, attrs); + initMediaPlayer(); + } + + private void initMediaPlayer() { + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + } catch (Exception e) { + Log.e("mediaPlayer", " init error", e); + } + if (mediaPlayer != null) { + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + hasPrepared = true; + setText(getAudioDuration()); + } + }); + mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + mp.reset(); + return false; + } + }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + stopAnimation(); + } + }); + } + setViewClick(); + } + + public String getAudioDuration() { + int duration = mediaPlayer.getDuration(); + if (duration == -1) { + return ""; + } else { + int sec = duration / 1000; + int m = sec / 60; + int s = sec % 60; + return m + ":" + s; + } + } + + public void setAudioUrl(String url) { + this.mUrl = url; + try { + mediaPlayer.setDataSource(url); + mediaPlayer.prepare(); + } catch (IOException | IllegalStateException e) { + Log.e("mediaPlayer", " set dataSource error", e); + } + } + + /** + * 用于需要设置不同的dataSource + * 二次setDataSource的时候需要reset 将MediaPlayer恢复到Initialized状态 + * + * @param url + */ + public void resetUrl(String url) { + if (TextUtils.isEmpty(mUrl) || hasPrepared) { + mediaPlayer.reset(); + } + setAudioUrl(url); + } + + private void startAnimation() { + if (audioAnimationHandler == null) { + audioAnimationHandler = new Handler(); + } + if (animationRunnable == null) { + animationRunnable = new Runnable() { + @Override + public void run() { + audioAnimationHandler.postDelayed(this, 200); + setDrawable(drawables[index % 3]); + index++; + } + }; + } + audioAnimationHandler.removeCallbacks(animationRunnable); + audioAnimationHandler.postDelayed(animationRunnable, 200); + } + + private void stopAnimation() { + setDrawable(drawables[2]); + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } + + //暂时只能设置在左边,后期改为可设置方向 + private void setDrawable(@DrawableRes int id) { + Drawable drawable = getResources().getDrawable(id); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + setCompoundDrawables(drawable, null, null, null); + } + + private void setViewClick() { + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + stopAnimation(); + } else { + mediaPlayer.seekTo(0); + startAnimation(); + mediaPlayer.start(); + } + } + }); + } + + public void release() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayer = null; + } + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java deleted file mode 100644 index cedc830..0000000 --- a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java +++ /dev/null @@ -1,160 +0,0 @@ -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/drawable/bg_audio_view.xml b/app/src/main/res/drawable/bg_audio_view.xml new file mode 100644 index 0000000..be7243e --- /dev/null +++ b/app/src/main/res/drawable/bg_audio_view.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_persuade_text.xml b/app/src/main/res/drawable/bg_pkg_persuade_text.xml deleted file mode 100644 index 29d4fe1..0000000 --- a/app/src/main/res/drawable/bg_pkg_persuade_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_punish_text.xml b/app/src/main/res/drawable/bg_pkg_punish_text.xml deleted file mode 100644 index 91ad460..0000000 --- a/app/src/main/res/drawable/bg_pkg_punish_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_warn_text.xml b/app/src/main/res/drawable/bg_pkg_warn_text.xml deleted file mode 100644 index b9cc363..0000000 --- a/app/src/main/res/drawable/bg_pkg_warn_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_audio_icon1.xml b/app/src/main/res/drawable/ic_audio_icon1.xml new file mode 100644 index 0000000..d31400e --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon1.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_audio_icon2.xml b/app/src/main/res/drawable/ic_audio_icon2.xml new file mode 100644 index 0000000..3abf4b5 --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon2.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_audio_icon3.xml b/app/src/main/res/drawable/ic_audio_icon3.xml new file mode 100644 index 0000000..848e68b --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon3.xml @@ -0,0 +1,15 @@ + + + + + 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 d5be6a9..1d21c58 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -65,26 +65,10 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_checked_detail.xml b/app/src/main/res/layout/activity_case_checked_detail.xml index ffc6e7d..653b8a1 100644 --- a/app/src/main/res/layout/activity_case_checked_detail.xml +++ b/app/src/main/res/layout/activity_case_checked_detail.xml @@ -1,6 +1,5 @@ @@ -69,26 +68,10 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_detail.xml b/app/src/main/res/layout/activity_case_detail.xml index 97ab7c6..e754c14 100644 --- a/app/src/main/res/layout/activity_case_detail.xml +++ b/app/src/main/res/layout/activity_case_detail.xml @@ -1,6 +1,5 @@ - - - + 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 cd878a0..d1550a1 100644 --- a/app/src/main/res/layout/activity_case_handle_detail.xml +++ b/app/src/main/res/layout/activity_case_handle_detail.xml @@ -43,27 +43,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 8914a5d..af34e8f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,15 +60,12 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); @Override @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -149,30 +140,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -218,10 +187,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 daa7451..530a77e 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -48,7 +46,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -60,7 +58,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -95,8 +92,6 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseOpinionView) @@ -105,8 +100,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -140,7 +135,6 @@ private String gridId;//可能来自案卷详情,也可能来自地图选点 private double longitude, latitude; private String changeState; - private MediaPlayer mediaPlayer; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; private ArrayList realPaths = new ArrayList<>();//真实图片路径 @@ -162,7 +156,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -255,30 +248,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -688,10 +659,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java new file mode 100644 index 0000000..f34a4d0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java @@ -0,0 +1,163 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.Handler; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; + +import androidx.annotation.DrawableRes; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; + +import java.io.IOException; + +public class AudioPlayerView extends AppCompatTextView { + + private static final int[] drawables = new int[]{R.drawable.ic_audio_icon1, R.drawable.ic_audio_icon2, R.drawable.ic_audio_icon3}; + private MediaPlayer mediaPlayer; + /** + * 在非初始化状态下调用setDataSource 会抛出IllegalStateException异常 + */ + private boolean hasPrepared = false; + private String mUrl; + private int index = 0; + private Handler audioAnimationHandler; + private Runnable animationRunnable; + + public AudioPlayerView(Context context, AttributeSet attrs) { + super(context, attrs); + initMediaPlayer(); + } + + private void initMediaPlayer() { + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + } catch (Exception e) { + Log.e("mediaPlayer", " init error", e); + } + if (mediaPlayer != null) { + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + hasPrepared = true; + setText(getAudioDuration()); + } + }); + mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + mp.reset(); + return false; + } + }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + stopAnimation(); + } + }); + } + setViewClick(); + } + + public String getAudioDuration() { + int duration = mediaPlayer.getDuration(); + if (duration == -1) { + return ""; + } else { + int sec = duration / 1000; + int m = sec / 60; + int s = sec % 60; + return m + ":" + s; + } + } + + public void setAudioUrl(String url) { + this.mUrl = url; + try { + mediaPlayer.setDataSource(url); + mediaPlayer.prepare(); + } catch (IOException | IllegalStateException e) { + Log.e("mediaPlayer", " set dataSource error", e); + } + } + + /** + * 用于需要设置不同的dataSource + * 二次setDataSource的时候需要reset 将MediaPlayer恢复到Initialized状态 + * + * @param url + */ + public void resetUrl(String url) { + if (TextUtils.isEmpty(mUrl) || hasPrepared) { + mediaPlayer.reset(); + } + setAudioUrl(url); + } + + private void startAnimation() { + if (audioAnimationHandler == null) { + audioAnimationHandler = new Handler(); + } + if (animationRunnable == null) { + animationRunnable = new Runnable() { + @Override + public void run() { + audioAnimationHandler.postDelayed(this, 200); + setDrawable(drawables[index % 3]); + index++; + } + }; + } + audioAnimationHandler.removeCallbacks(animationRunnable); + audioAnimationHandler.postDelayed(animationRunnable, 200); + } + + private void stopAnimation() { + setDrawable(drawables[2]); + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } + + //暂时只能设置在左边,后期改为可设置方向 + private void setDrawable(@DrawableRes int id) { + Drawable drawable = getResources().getDrawable(id); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + setCompoundDrawables(drawable, null, null, null); + } + + private void setViewClick() { + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + stopAnimation(); + } else { + mediaPlayer.seekTo(0); + startAnimation(); + mediaPlayer.start(); + } + } + }); + } + + public void release() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayer = null; + } + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java deleted file mode 100644 index cedc830..0000000 --- a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java +++ /dev/null @@ -1,160 +0,0 @@ -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/drawable/bg_audio_view.xml b/app/src/main/res/drawable/bg_audio_view.xml new file mode 100644 index 0000000..be7243e --- /dev/null +++ b/app/src/main/res/drawable/bg_audio_view.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_persuade_text.xml b/app/src/main/res/drawable/bg_pkg_persuade_text.xml deleted file mode 100644 index 29d4fe1..0000000 --- a/app/src/main/res/drawable/bg_pkg_persuade_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_punish_text.xml b/app/src/main/res/drawable/bg_pkg_punish_text.xml deleted file mode 100644 index 91ad460..0000000 --- a/app/src/main/res/drawable/bg_pkg_punish_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_warn_text.xml b/app/src/main/res/drawable/bg_pkg_warn_text.xml deleted file mode 100644 index b9cc363..0000000 --- a/app/src/main/res/drawable/bg_pkg_warn_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_audio_icon1.xml b/app/src/main/res/drawable/ic_audio_icon1.xml new file mode 100644 index 0000000..d31400e --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon1.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_audio_icon2.xml b/app/src/main/res/drawable/ic_audio_icon2.xml new file mode 100644 index 0000000..3abf4b5 --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon2.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_audio_icon3.xml b/app/src/main/res/drawable/ic_audio_icon3.xml new file mode 100644 index 0000000..848e68b --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon3.xml @@ -0,0 +1,15 @@ + + + + + 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 d5be6a9..1d21c58 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -65,26 +65,10 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_checked_detail.xml b/app/src/main/res/layout/activity_case_checked_detail.xml index ffc6e7d..653b8a1 100644 --- a/app/src/main/res/layout/activity_case_checked_detail.xml +++ b/app/src/main/res/layout/activity_case_checked_detail.xml @@ -1,6 +1,5 @@ @@ -69,26 +68,10 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_detail.xml b/app/src/main/res/layout/activity_case_detail.xml index 97ab7c6..e754c14 100644 --- a/app/src/main/res/layout/activity_case_detail.xml +++ b/app/src/main/res/layout/activity_case_detail.xml @@ -1,6 +1,5 @@ - - - + 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 cd878a0..d1550a1 100644 --- a/app/src/main/res/layout/activity_case_handle_detail.xml +++ b/app/src/main/res/layout/activity_case_handle_detail.xml @@ -43,27 +43,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_handled_detail.xml b/app/src/main/res/layout/activity_case_handled_detail.xml index 99786c1..27fa6d1 100644 --- a/app/src/main/res/layout/activity_case_handled_detail.xml +++ b/app/src/main/res/layout/activity_case_handled_detail.xml @@ -1,6 +1,5 @@ @@ -166,26 +165,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 8914a5d..af34e8f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,15 +60,12 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); @Override @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -149,30 +140,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -218,10 +187,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 daa7451..530a77e 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -48,7 +46,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -60,7 +58,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -95,8 +92,6 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseOpinionView) @@ -105,8 +100,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -140,7 +135,6 @@ private String gridId;//可能来自案卷详情,也可能来自地图选点 private double longitude, latitude; private String changeState; - private MediaPlayer mediaPlayer; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; private ArrayList realPaths = new ArrayList<>();//真实图片路径 @@ -162,7 +156,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -255,30 +248,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -688,10 +659,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java new file mode 100644 index 0000000..f34a4d0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java @@ -0,0 +1,163 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.Handler; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; + +import androidx.annotation.DrawableRes; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; + +import java.io.IOException; + +public class AudioPlayerView extends AppCompatTextView { + + private static final int[] drawables = new int[]{R.drawable.ic_audio_icon1, R.drawable.ic_audio_icon2, R.drawable.ic_audio_icon3}; + private MediaPlayer mediaPlayer; + /** + * 在非初始化状态下调用setDataSource 会抛出IllegalStateException异常 + */ + private boolean hasPrepared = false; + private String mUrl; + private int index = 0; + private Handler audioAnimationHandler; + private Runnable animationRunnable; + + public AudioPlayerView(Context context, AttributeSet attrs) { + super(context, attrs); + initMediaPlayer(); + } + + private void initMediaPlayer() { + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + } catch (Exception e) { + Log.e("mediaPlayer", " init error", e); + } + if (mediaPlayer != null) { + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + hasPrepared = true; + setText(getAudioDuration()); + } + }); + mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + mp.reset(); + return false; + } + }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + stopAnimation(); + } + }); + } + setViewClick(); + } + + public String getAudioDuration() { + int duration = mediaPlayer.getDuration(); + if (duration == -1) { + return ""; + } else { + int sec = duration / 1000; + int m = sec / 60; + int s = sec % 60; + return m + ":" + s; + } + } + + public void setAudioUrl(String url) { + this.mUrl = url; + try { + mediaPlayer.setDataSource(url); + mediaPlayer.prepare(); + } catch (IOException | IllegalStateException e) { + Log.e("mediaPlayer", " set dataSource error", e); + } + } + + /** + * 用于需要设置不同的dataSource + * 二次setDataSource的时候需要reset 将MediaPlayer恢复到Initialized状态 + * + * @param url + */ + public void resetUrl(String url) { + if (TextUtils.isEmpty(mUrl) || hasPrepared) { + mediaPlayer.reset(); + } + setAudioUrl(url); + } + + private void startAnimation() { + if (audioAnimationHandler == null) { + audioAnimationHandler = new Handler(); + } + if (animationRunnable == null) { + animationRunnable = new Runnable() { + @Override + public void run() { + audioAnimationHandler.postDelayed(this, 200); + setDrawable(drawables[index % 3]); + index++; + } + }; + } + audioAnimationHandler.removeCallbacks(animationRunnable); + audioAnimationHandler.postDelayed(animationRunnable, 200); + } + + private void stopAnimation() { + setDrawable(drawables[2]); + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } + + //暂时只能设置在左边,后期改为可设置方向 + private void setDrawable(@DrawableRes int id) { + Drawable drawable = getResources().getDrawable(id); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + setCompoundDrawables(drawable, null, null, null); + } + + private void setViewClick() { + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + stopAnimation(); + } else { + mediaPlayer.seekTo(0); + startAnimation(); + mediaPlayer.start(); + } + } + }); + } + + public void release() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayer = null; + } + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java deleted file mode 100644 index cedc830..0000000 --- a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java +++ /dev/null @@ -1,160 +0,0 @@ -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/drawable/bg_audio_view.xml b/app/src/main/res/drawable/bg_audio_view.xml new file mode 100644 index 0000000..be7243e --- /dev/null +++ b/app/src/main/res/drawable/bg_audio_view.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_persuade_text.xml b/app/src/main/res/drawable/bg_pkg_persuade_text.xml deleted file mode 100644 index 29d4fe1..0000000 --- a/app/src/main/res/drawable/bg_pkg_persuade_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_punish_text.xml b/app/src/main/res/drawable/bg_pkg_punish_text.xml deleted file mode 100644 index 91ad460..0000000 --- a/app/src/main/res/drawable/bg_pkg_punish_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_warn_text.xml b/app/src/main/res/drawable/bg_pkg_warn_text.xml deleted file mode 100644 index b9cc363..0000000 --- a/app/src/main/res/drawable/bg_pkg_warn_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_audio_icon1.xml b/app/src/main/res/drawable/ic_audio_icon1.xml new file mode 100644 index 0000000..d31400e --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon1.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_audio_icon2.xml b/app/src/main/res/drawable/ic_audio_icon2.xml new file mode 100644 index 0000000..3abf4b5 --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon2.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_audio_icon3.xml b/app/src/main/res/drawable/ic_audio_icon3.xml new file mode 100644 index 0000000..848e68b --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon3.xml @@ -0,0 +1,15 @@ + + + + + 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 d5be6a9..1d21c58 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -65,26 +65,10 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_checked_detail.xml b/app/src/main/res/layout/activity_case_checked_detail.xml index ffc6e7d..653b8a1 100644 --- a/app/src/main/res/layout/activity_case_checked_detail.xml +++ b/app/src/main/res/layout/activity_case_checked_detail.xml @@ -1,6 +1,5 @@ @@ -69,26 +68,10 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_detail.xml b/app/src/main/res/layout/activity_case_detail.xml index 97ab7c6..e754c14 100644 --- a/app/src/main/res/layout/activity_case_detail.xml +++ b/app/src/main/res/layout/activity_case_detail.xml @@ -1,6 +1,5 @@ - - - + 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 cd878a0..d1550a1 100644 --- a/app/src/main/res/layout/activity_case_handle_detail.xml +++ b/app/src/main/res/layout/activity_case_handle_detail.xml @@ -43,27 +43,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_handled_detail.xml b/app/src/main/res/layout/activity_case_handled_detail.xml index 99786c1..27fa6d1 100644 --- a/app/src/main/res/layout/activity_case_handled_detail.xml +++ b/app/src/main/res/layout/activity_case_handled_detail.xml @@ -1,6 +1,5 @@ @@ -166,26 +165,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/res/layout/activity_case_todo_detail.xml b/app/src/main/res/layout/activity_case_todo_detail.xml index e08d8d0..345ca19 100644 --- a/app/src/main/res/layout/activity_case_todo_detail.xml +++ b/app/src/main/res/layout/activity_case_todo_detail.xml @@ -112,26 +112,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 8914a5d..af34e8f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,15 +60,12 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); @Override @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -149,30 +140,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -218,10 +187,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 daa7451..530a77e 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -48,7 +46,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -60,7 +58,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -95,8 +92,6 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseOpinionView) @@ -105,8 +100,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -140,7 +135,6 @@ private String gridId;//可能来自案卷详情,也可能来自地图选点 private double longitude, latitude; private String changeState; - private MediaPlayer mediaPlayer; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; private ArrayList realPaths = new ArrayList<>();//真实图片路径 @@ -162,7 +156,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -255,30 +248,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -688,10 +659,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java new file mode 100644 index 0000000..f34a4d0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java @@ -0,0 +1,163 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.Handler; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; + +import androidx.annotation.DrawableRes; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; + +import java.io.IOException; + +public class AudioPlayerView extends AppCompatTextView { + + private static final int[] drawables = new int[]{R.drawable.ic_audio_icon1, R.drawable.ic_audio_icon2, R.drawable.ic_audio_icon3}; + private MediaPlayer mediaPlayer; + /** + * 在非初始化状态下调用setDataSource 会抛出IllegalStateException异常 + */ + private boolean hasPrepared = false; + private String mUrl; + private int index = 0; + private Handler audioAnimationHandler; + private Runnable animationRunnable; + + public AudioPlayerView(Context context, AttributeSet attrs) { + super(context, attrs); + initMediaPlayer(); + } + + private void initMediaPlayer() { + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + } catch (Exception e) { + Log.e("mediaPlayer", " init error", e); + } + if (mediaPlayer != null) { + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + hasPrepared = true; + setText(getAudioDuration()); + } + }); + mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + mp.reset(); + return false; + } + }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + stopAnimation(); + } + }); + } + setViewClick(); + } + + public String getAudioDuration() { + int duration = mediaPlayer.getDuration(); + if (duration == -1) { + return ""; + } else { + int sec = duration / 1000; + int m = sec / 60; + int s = sec % 60; + return m + ":" + s; + } + } + + public void setAudioUrl(String url) { + this.mUrl = url; + try { + mediaPlayer.setDataSource(url); + mediaPlayer.prepare(); + } catch (IOException | IllegalStateException e) { + Log.e("mediaPlayer", " set dataSource error", e); + } + } + + /** + * 用于需要设置不同的dataSource + * 二次setDataSource的时候需要reset 将MediaPlayer恢复到Initialized状态 + * + * @param url + */ + public void resetUrl(String url) { + if (TextUtils.isEmpty(mUrl) || hasPrepared) { + mediaPlayer.reset(); + } + setAudioUrl(url); + } + + private void startAnimation() { + if (audioAnimationHandler == null) { + audioAnimationHandler = new Handler(); + } + if (animationRunnable == null) { + animationRunnable = new Runnable() { + @Override + public void run() { + audioAnimationHandler.postDelayed(this, 200); + setDrawable(drawables[index % 3]); + index++; + } + }; + } + audioAnimationHandler.removeCallbacks(animationRunnable); + audioAnimationHandler.postDelayed(animationRunnable, 200); + } + + private void stopAnimation() { + setDrawable(drawables[2]); + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } + + //暂时只能设置在左边,后期改为可设置方向 + private void setDrawable(@DrawableRes int id) { + Drawable drawable = getResources().getDrawable(id); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + setCompoundDrawables(drawable, null, null, null); + } + + private void setViewClick() { + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + stopAnimation(); + } else { + mediaPlayer.seekTo(0); + startAnimation(); + mediaPlayer.start(); + } + } + }); + } + + public void release() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayer = null; + } + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java deleted file mode 100644 index cedc830..0000000 --- a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java +++ /dev/null @@ -1,160 +0,0 @@ -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/drawable/bg_audio_view.xml b/app/src/main/res/drawable/bg_audio_view.xml new file mode 100644 index 0000000..be7243e --- /dev/null +++ b/app/src/main/res/drawable/bg_audio_view.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_persuade_text.xml b/app/src/main/res/drawable/bg_pkg_persuade_text.xml deleted file mode 100644 index 29d4fe1..0000000 --- a/app/src/main/res/drawable/bg_pkg_persuade_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_punish_text.xml b/app/src/main/res/drawable/bg_pkg_punish_text.xml deleted file mode 100644 index 91ad460..0000000 --- a/app/src/main/res/drawable/bg_pkg_punish_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_warn_text.xml b/app/src/main/res/drawable/bg_pkg_warn_text.xml deleted file mode 100644 index b9cc363..0000000 --- a/app/src/main/res/drawable/bg_pkg_warn_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_audio_icon1.xml b/app/src/main/res/drawable/ic_audio_icon1.xml new file mode 100644 index 0000000..d31400e --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon1.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_audio_icon2.xml b/app/src/main/res/drawable/ic_audio_icon2.xml new file mode 100644 index 0000000..3abf4b5 --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon2.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_audio_icon3.xml b/app/src/main/res/drawable/ic_audio_icon3.xml new file mode 100644 index 0000000..848e68b --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon3.xml @@ -0,0 +1,15 @@ + + + + + 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 d5be6a9..1d21c58 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -65,26 +65,10 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_checked_detail.xml b/app/src/main/res/layout/activity_case_checked_detail.xml index ffc6e7d..653b8a1 100644 --- a/app/src/main/res/layout/activity_case_checked_detail.xml +++ b/app/src/main/res/layout/activity_case_checked_detail.xml @@ -1,6 +1,5 @@ @@ -69,26 +68,10 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_detail.xml b/app/src/main/res/layout/activity_case_detail.xml index 97ab7c6..e754c14 100644 --- a/app/src/main/res/layout/activity_case_detail.xml +++ b/app/src/main/res/layout/activity_case_detail.xml @@ -1,6 +1,5 @@ - - - + 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 cd878a0..d1550a1 100644 --- a/app/src/main/res/layout/activity_case_handle_detail.xml +++ b/app/src/main/res/layout/activity_case_handle_detail.xml @@ -43,27 +43,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_handled_detail.xml b/app/src/main/res/layout/activity_case_handled_detail.xml index 99786c1..27fa6d1 100644 --- a/app/src/main/res/layout/activity_case_handled_detail.xml +++ b/app/src/main/res/layout/activity_case_handled_detail.xml @@ -1,6 +1,5 @@ @@ -166,26 +165,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/res/layout/activity_case_todo_detail.xml b/app/src/main/res/layout/activity_case_todo_detail.xml index e08d8d0..345ca19 100644 --- a/app/src/main/res/layout/activity_case_todo_detail.xml +++ b/app/src/main/res/layout/activity_case_todo_detail.xml @@ -112,26 +112,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/res/layout/activity_case_todo_handled_detail.xml b/app/src/main/res/layout/activity_case_todo_handled_detail.xml index aced841..a929b43 100644 --- a/app/src/main/res/layout/activity_case_todo_handled_detail.xml +++ b/app/src/main/res/layout/activity_case_todo_handled_detail.xml @@ -1,6 +1,5 @@ @@ -165,26 +164,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 8914a5d..af34e8f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,15 +60,12 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); @Override @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -149,30 +140,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -218,10 +187,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 daa7451..530a77e 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -48,7 +46,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -60,7 +58,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -95,8 +92,6 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseOpinionView) @@ -105,8 +100,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -140,7 +135,6 @@ private String gridId;//可能来自案卷详情,也可能来自地图选点 private double longitude, latitude; private String changeState; - private MediaPlayer mediaPlayer; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; private ArrayList realPaths = new ArrayList<>();//真实图片路径 @@ -162,7 +156,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -255,30 +248,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -688,10 +659,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java new file mode 100644 index 0000000..f34a4d0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java @@ -0,0 +1,163 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.Handler; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; + +import androidx.annotation.DrawableRes; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; + +import java.io.IOException; + +public class AudioPlayerView extends AppCompatTextView { + + private static final int[] drawables = new int[]{R.drawable.ic_audio_icon1, R.drawable.ic_audio_icon2, R.drawable.ic_audio_icon3}; + private MediaPlayer mediaPlayer; + /** + * 在非初始化状态下调用setDataSource 会抛出IllegalStateException异常 + */ + private boolean hasPrepared = false; + private String mUrl; + private int index = 0; + private Handler audioAnimationHandler; + private Runnable animationRunnable; + + public AudioPlayerView(Context context, AttributeSet attrs) { + super(context, attrs); + initMediaPlayer(); + } + + private void initMediaPlayer() { + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + } catch (Exception e) { + Log.e("mediaPlayer", " init error", e); + } + if (mediaPlayer != null) { + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + hasPrepared = true; + setText(getAudioDuration()); + } + }); + mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + mp.reset(); + return false; + } + }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + stopAnimation(); + } + }); + } + setViewClick(); + } + + public String getAudioDuration() { + int duration = mediaPlayer.getDuration(); + if (duration == -1) { + return ""; + } else { + int sec = duration / 1000; + int m = sec / 60; + int s = sec % 60; + return m + ":" + s; + } + } + + public void setAudioUrl(String url) { + this.mUrl = url; + try { + mediaPlayer.setDataSource(url); + mediaPlayer.prepare(); + } catch (IOException | IllegalStateException e) { + Log.e("mediaPlayer", " set dataSource error", e); + } + } + + /** + * 用于需要设置不同的dataSource + * 二次setDataSource的时候需要reset 将MediaPlayer恢复到Initialized状态 + * + * @param url + */ + public void resetUrl(String url) { + if (TextUtils.isEmpty(mUrl) || hasPrepared) { + mediaPlayer.reset(); + } + setAudioUrl(url); + } + + private void startAnimation() { + if (audioAnimationHandler == null) { + audioAnimationHandler = new Handler(); + } + if (animationRunnable == null) { + animationRunnable = new Runnable() { + @Override + public void run() { + audioAnimationHandler.postDelayed(this, 200); + setDrawable(drawables[index % 3]); + index++; + } + }; + } + audioAnimationHandler.removeCallbacks(animationRunnable); + audioAnimationHandler.postDelayed(animationRunnable, 200); + } + + private void stopAnimation() { + setDrawable(drawables[2]); + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } + + //暂时只能设置在左边,后期改为可设置方向 + private void setDrawable(@DrawableRes int id) { + Drawable drawable = getResources().getDrawable(id); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + setCompoundDrawables(drawable, null, null, null); + } + + private void setViewClick() { + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + stopAnimation(); + } else { + mediaPlayer.seekTo(0); + startAnimation(); + mediaPlayer.start(); + } + } + }); + } + + public void release() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayer = null; + } + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java deleted file mode 100644 index cedc830..0000000 --- a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java +++ /dev/null @@ -1,160 +0,0 @@ -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/drawable/bg_audio_view.xml b/app/src/main/res/drawable/bg_audio_view.xml new file mode 100644 index 0000000..be7243e --- /dev/null +++ b/app/src/main/res/drawable/bg_audio_view.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_persuade_text.xml b/app/src/main/res/drawable/bg_pkg_persuade_text.xml deleted file mode 100644 index 29d4fe1..0000000 --- a/app/src/main/res/drawable/bg_pkg_persuade_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_punish_text.xml b/app/src/main/res/drawable/bg_pkg_punish_text.xml deleted file mode 100644 index 91ad460..0000000 --- a/app/src/main/res/drawable/bg_pkg_punish_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_warn_text.xml b/app/src/main/res/drawable/bg_pkg_warn_text.xml deleted file mode 100644 index b9cc363..0000000 --- a/app/src/main/res/drawable/bg_pkg_warn_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_audio_icon1.xml b/app/src/main/res/drawable/ic_audio_icon1.xml new file mode 100644 index 0000000..d31400e --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon1.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_audio_icon2.xml b/app/src/main/res/drawable/ic_audio_icon2.xml new file mode 100644 index 0000000..3abf4b5 --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon2.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_audio_icon3.xml b/app/src/main/res/drawable/ic_audio_icon3.xml new file mode 100644 index 0000000..848e68b --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon3.xml @@ -0,0 +1,15 @@ + + + + + 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 d5be6a9..1d21c58 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -65,26 +65,10 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_checked_detail.xml b/app/src/main/res/layout/activity_case_checked_detail.xml index ffc6e7d..653b8a1 100644 --- a/app/src/main/res/layout/activity_case_checked_detail.xml +++ b/app/src/main/res/layout/activity_case_checked_detail.xml @@ -1,6 +1,5 @@ @@ -69,26 +68,10 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_detail.xml b/app/src/main/res/layout/activity_case_detail.xml index 97ab7c6..e754c14 100644 --- a/app/src/main/res/layout/activity_case_detail.xml +++ b/app/src/main/res/layout/activity_case_detail.xml @@ -1,6 +1,5 @@ - - - + 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 cd878a0..d1550a1 100644 --- a/app/src/main/res/layout/activity_case_handle_detail.xml +++ b/app/src/main/res/layout/activity_case_handle_detail.xml @@ -43,27 +43,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_handled_detail.xml b/app/src/main/res/layout/activity_case_handled_detail.xml index 99786c1..27fa6d1 100644 --- a/app/src/main/res/layout/activity_case_handled_detail.xml +++ b/app/src/main/res/layout/activity_case_handled_detail.xml @@ -1,6 +1,5 @@ @@ -166,26 +165,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/res/layout/activity_case_todo_detail.xml b/app/src/main/res/layout/activity_case_todo_detail.xml index e08d8d0..345ca19 100644 --- a/app/src/main/res/layout/activity_case_todo_detail.xml +++ b/app/src/main/res/layout/activity_case_todo_detail.xml @@ -112,26 +112,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/res/layout/activity_case_todo_handled_detail.xml b/app/src/main/res/layout/activity_case_todo_handled_detail.xml index aced841..a929b43 100644 --- a/app/src/main/res/layout/activity_case_todo_handled_detail.xml +++ b/app/src/main/res/layout/activity_case_todo_handled_detail.xml @@ -1,6 +1,5 @@ @@ -165,26 +164,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index f61f26c..a4240be 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -53,36 +53,16 @@ - + - - - realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 8914a5d..af34e8f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,15 +60,12 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); @Override @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -149,30 +140,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -218,10 +187,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 daa7451..530a77e 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -48,7 +46,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -60,7 +58,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -95,8 +92,6 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseOpinionView) @@ -105,8 +100,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -140,7 +135,6 @@ private String gridId;//可能来自案卷详情,也可能来自地图选点 private double longitude, latitude; private String changeState; - private MediaPlayer mediaPlayer; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; private ArrayList realPaths = new ArrayList<>();//真实图片路径 @@ -162,7 +156,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -255,30 +248,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -688,10 +659,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java new file mode 100644 index 0000000..f34a4d0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java @@ -0,0 +1,163 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.Handler; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; + +import androidx.annotation.DrawableRes; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; + +import java.io.IOException; + +public class AudioPlayerView extends AppCompatTextView { + + private static final int[] drawables = new int[]{R.drawable.ic_audio_icon1, R.drawable.ic_audio_icon2, R.drawable.ic_audio_icon3}; + private MediaPlayer mediaPlayer; + /** + * 在非初始化状态下调用setDataSource 会抛出IllegalStateException异常 + */ + private boolean hasPrepared = false; + private String mUrl; + private int index = 0; + private Handler audioAnimationHandler; + private Runnable animationRunnable; + + public AudioPlayerView(Context context, AttributeSet attrs) { + super(context, attrs); + initMediaPlayer(); + } + + private void initMediaPlayer() { + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + } catch (Exception e) { + Log.e("mediaPlayer", " init error", e); + } + if (mediaPlayer != null) { + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + hasPrepared = true; + setText(getAudioDuration()); + } + }); + mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + mp.reset(); + return false; + } + }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + stopAnimation(); + } + }); + } + setViewClick(); + } + + public String getAudioDuration() { + int duration = mediaPlayer.getDuration(); + if (duration == -1) { + return ""; + } else { + int sec = duration / 1000; + int m = sec / 60; + int s = sec % 60; + return m + ":" + s; + } + } + + public void setAudioUrl(String url) { + this.mUrl = url; + try { + mediaPlayer.setDataSource(url); + mediaPlayer.prepare(); + } catch (IOException | IllegalStateException e) { + Log.e("mediaPlayer", " set dataSource error", e); + } + } + + /** + * 用于需要设置不同的dataSource + * 二次setDataSource的时候需要reset 将MediaPlayer恢复到Initialized状态 + * + * @param url + */ + public void resetUrl(String url) { + if (TextUtils.isEmpty(mUrl) || hasPrepared) { + mediaPlayer.reset(); + } + setAudioUrl(url); + } + + private void startAnimation() { + if (audioAnimationHandler == null) { + audioAnimationHandler = new Handler(); + } + if (animationRunnable == null) { + animationRunnable = new Runnable() { + @Override + public void run() { + audioAnimationHandler.postDelayed(this, 200); + setDrawable(drawables[index % 3]); + index++; + } + }; + } + audioAnimationHandler.removeCallbacks(animationRunnable); + audioAnimationHandler.postDelayed(animationRunnable, 200); + } + + private void stopAnimation() { + setDrawable(drawables[2]); + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } + + //暂时只能设置在左边,后期改为可设置方向 + private void setDrawable(@DrawableRes int id) { + Drawable drawable = getResources().getDrawable(id); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + setCompoundDrawables(drawable, null, null, null); + } + + private void setViewClick() { + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + stopAnimation(); + } else { + mediaPlayer.seekTo(0); + startAnimation(); + mediaPlayer.start(); + } + } + }); + } + + public void release() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayer = null; + } + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java deleted file mode 100644 index cedc830..0000000 --- a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java +++ /dev/null @@ -1,160 +0,0 @@ -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/drawable/bg_audio_view.xml b/app/src/main/res/drawable/bg_audio_view.xml new file mode 100644 index 0000000..be7243e --- /dev/null +++ b/app/src/main/res/drawable/bg_audio_view.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_persuade_text.xml b/app/src/main/res/drawable/bg_pkg_persuade_text.xml deleted file mode 100644 index 29d4fe1..0000000 --- a/app/src/main/res/drawable/bg_pkg_persuade_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_punish_text.xml b/app/src/main/res/drawable/bg_pkg_punish_text.xml deleted file mode 100644 index 91ad460..0000000 --- a/app/src/main/res/drawable/bg_pkg_punish_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_warn_text.xml b/app/src/main/res/drawable/bg_pkg_warn_text.xml deleted file mode 100644 index b9cc363..0000000 --- a/app/src/main/res/drawable/bg_pkg_warn_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_audio_icon1.xml b/app/src/main/res/drawable/ic_audio_icon1.xml new file mode 100644 index 0000000..d31400e --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon1.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_audio_icon2.xml b/app/src/main/res/drawable/ic_audio_icon2.xml new file mode 100644 index 0000000..3abf4b5 --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon2.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_audio_icon3.xml b/app/src/main/res/drawable/ic_audio_icon3.xml new file mode 100644 index 0000000..848e68b --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon3.xml @@ -0,0 +1,15 @@ + + + + + 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 d5be6a9..1d21c58 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -65,26 +65,10 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_checked_detail.xml b/app/src/main/res/layout/activity_case_checked_detail.xml index ffc6e7d..653b8a1 100644 --- a/app/src/main/res/layout/activity_case_checked_detail.xml +++ b/app/src/main/res/layout/activity_case_checked_detail.xml @@ -1,6 +1,5 @@ @@ -69,26 +68,10 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_detail.xml b/app/src/main/res/layout/activity_case_detail.xml index 97ab7c6..e754c14 100644 --- a/app/src/main/res/layout/activity_case_detail.xml +++ b/app/src/main/res/layout/activity_case_detail.xml @@ -1,6 +1,5 @@ - - - + 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 cd878a0..d1550a1 100644 --- a/app/src/main/res/layout/activity_case_handle_detail.xml +++ b/app/src/main/res/layout/activity_case_handle_detail.xml @@ -43,27 +43,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_handled_detail.xml b/app/src/main/res/layout/activity_case_handled_detail.xml index 99786c1..27fa6d1 100644 --- a/app/src/main/res/layout/activity_case_handled_detail.xml +++ b/app/src/main/res/layout/activity_case_handled_detail.xml @@ -1,6 +1,5 @@ @@ -166,26 +165,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/res/layout/activity_case_todo_detail.xml b/app/src/main/res/layout/activity_case_todo_detail.xml index e08d8d0..345ca19 100644 --- a/app/src/main/res/layout/activity_case_todo_detail.xml +++ b/app/src/main/res/layout/activity_case_todo_detail.xml @@ -112,26 +112,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/res/layout/activity_case_todo_handled_detail.xml b/app/src/main/res/layout/activity_case_todo_handled_detail.xml index aced841..a929b43 100644 --- a/app/src/main/res/layout/activity_case_todo_handled_detail.xml +++ b/app/src/main/res/layout/activity_case_todo_handled_detail.xml @@ -1,6 +1,5 @@ @@ -165,26 +164,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index f61f26c..a4240be 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -53,36 +53,16 @@ - + - - - @@ -66,26 +65,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 8914a5d..af34e8f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,15 +60,12 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); @Override @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -149,30 +140,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -218,10 +187,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 daa7451..530a77e 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -48,7 +46,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -60,7 +58,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -95,8 +92,6 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseOpinionView) @@ -105,8 +100,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -140,7 +135,6 @@ private String gridId;//可能来自案卷详情,也可能来自地图选点 private double longitude, latitude; private String changeState; - private MediaPlayer mediaPlayer; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; private ArrayList realPaths = new ArrayList<>();//真实图片路径 @@ -162,7 +156,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -255,30 +248,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -688,10 +659,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java new file mode 100644 index 0000000..f34a4d0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java @@ -0,0 +1,163 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.Handler; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; + +import androidx.annotation.DrawableRes; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; + +import java.io.IOException; + +public class AudioPlayerView extends AppCompatTextView { + + private static final int[] drawables = new int[]{R.drawable.ic_audio_icon1, R.drawable.ic_audio_icon2, R.drawable.ic_audio_icon3}; + private MediaPlayer mediaPlayer; + /** + * 在非初始化状态下调用setDataSource 会抛出IllegalStateException异常 + */ + private boolean hasPrepared = false; + private String mUrl; + private int index = 0; + private Handler audioAnimationHandler; + private Runnable animationRunnable; + + public AudioPlayerView(Context context, AttributeSet attrs) { + super(context, attrs); + initMediaPlayer(); + } + + private void initMediaPlayer() { + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + } catch (Exception e) { + Log.e("mediaPlayer", " init error", e); + } + if (mediaPlayer != null) { + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + hasPrepared = true; + setText(getAudioDuration()); + } + }); + mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + mp.reset(); + return false; + } + }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + stopAnimation(); + } + }); + } + setViewClick(); + } + + public String getAudioDuration() { + int duration = mediaPlayer.getDuration(); + if (duration == -1) { + return ""; + } else { + int sec = duration / 1000; + int m = sec / 60; + int s = sec % 60; + return m + ":" + s; + } + } + + public void setAudioUrl(String url) { + this.mUrl = url; + try { + mediaPlayer.setDataSource(url); + mediaPlayer.prepare(); + } catch (IOException | IllegalStateException e) { + Log.e("mediaPlayer", " set dataSource error", e); + } + } + + /** + * 用于需要设置不同的dataSource + * 二次setDataSource的时候需要reset 将MediaPlayer恢复到Initialized状态 + * + * @param url + */ + public void resetUrl(String url) { + if (TextUtils.isEmpty(mUrl) || hasPrepared) { + mediaPlayer.reset(); + } + setAudioUrl(url); + } + + private void startAnimation() { + if (audioAnimationHandler == null) { + audioAnimationHandler = new Handler(); + } + if (animationRunnable == null) { + animationRunnable = new Runnable() { + @Override + public void run() { + audioAnimationHandler.postDelayed(this, 200); + setDrawable(drawables[index % 3]); + index++; + } + }; + } + audioAnimationHandler.removeCallbacks(animationRunnable); + audioAnimationHandler.postDelayed(animationRunnable, 200); + } + + private void stopAnimation() { + setDrawable(drawables[2]); + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } + + //暂时只能设置在左边,后期改为可设置方向 + private void setDrawable(@DrawableRes int id) { + Drawable drawable = getResources().getDrawable(id); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + setCompoundDrawables(drawable, null, null, null); + } + + private void setViewClick() { + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + stopAnimation(); + } else { + mediaPlayer.seekTo(0); + startAnimation(); + mediaPlayer.start(); + } + } + }); + } + + public void release() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayer = null; + } + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java deleted file mode 100644 index cedc830..0000000 --- a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java +++ /dev/null @@ -1,160 +0,0 @@ -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/drawable/bg_audio_view.xml b/app/src/main/res/drawable/bg_audio_view.xml new file mode 100644 index 0000000..be7243e --- /dev/null +++ b/app/src/main/res/drawable/bg_audio_view.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_persuade_text.xml b/app/src/main/res/drawable/bg_pkg_persuade_text.xml deleted file mode 100644 index 29d4fe1..0000000 --- a/app/src/main/res/drawable/bg_pkg_persuade_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_punish_text.xml b/app/src/main/res/drawable/bg_pkg_punish_text.xml deleted file mode 100644 index 91ad460..0000000 --- a/app/src/main/res/drawable/bg_pkg_punish_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_warn_text.xml b/app/src/main/res/drawable/bg_pkg_warn_text.xml deleted file mode 100644 index b9cc363..0000000 --- a/app/src/main/res/drawable/bg_pkg_warn_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_audio_icon1.xml b/app/src/main/res/drawable/ic_audio_icon1.xml new file mode 100644 index 0000000..d31400e --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon1.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_audio_icon2.xml b/app/src/main/res/drawable/ic_audio_icon2.xml new file mode 100644 index 0000000..3abf4b5 --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon2.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_audio_icon3.xml b/app/src/main/res/drawable/ic_audio_icon3.xml new file mode 100644 index 0000000..848e68b --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon3.xml @@ -0,0 +1,15 @@ + + + + + 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 d5be6a9..1d21c58 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -65,26 +65,10 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_checked_detail.xml b/app/src/main/res/layout/activity_case_checked_detail.xml index ffc6e7d..653b8a1 100644 --- a/app/src/main/res/layout/activity_case_checked_detail.xml +++ b/app/src/main/res/layout/activity_case_checked_detail.xml @@ -1,6 +1,5 @@ @@ -69,26 +68,10 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_detail.xml b/app/src/main/res/layout/activity_case_detail.xml index 97ab7c6..e754c14 100644 --- a/app/src/main/res/layout/activity_case_detail.xml +++ b/app/src/main/res/layout/activity_case_detail.xml @@ -1,6 +1,5 @@ - - - + 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 cd878a0..d1550a1 100644 --- a/app/src/main/res/layout/activity_case_handle_detail.xml +++ b/app/src/main/res/layout/activity_case_handle_detail.xml @@ -43,27 +43,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_handled_detail.xml b/app/src/main/res/layout/activity_case_handled_detail.xml index 99786c1..27fa6d1 100644 --- a/app/src/main/res/layout/activity_case_handled_detail.xml +++ b/app/src/main/res/layout/activity_case_handled_detail.xml @@ -1,6 +1,5 @@ @@ -166,26 +165,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/res/layout/activity_case_todo_detail.xml b/app/src/main/res/layout/activity_case_todo_detail.xml index e08d8d0..345ca19 100644 --- a/app/src/main/res/layout/activity_case_todo_detail.xml +++ b/app/src/main/res/layout/activity_case_todo_detail.xml @@ -112,26 +112,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/res/layout/activity_case_todo_handled_detail.xml b/app/src/main/res/layout/activity_case_todo_handled_detail.xml index aced841..a929b43 100644 --- a/app/src/main/res/layout/activity_case_todo_handled_detail.xml +++ b/app/src/main/res/layout/activity_case_todo_handled_detail.xml @@ -1,6 +1,5 @@ @@ -165,26 +164,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index f61f26c..a4240be 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -53,36 +53,16 @@ - + - - - @@ -66,26 +65,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/res/layout/activity_case_verify_detail.xml b/app/src/main/res/layout/activity_case_verify_detail.xml index 0dd3d72..0c90a09 100644 --- a/app/src/main/res/layout/activity_case_verify_detail.xml +++ b/app/src/main/res/layout/activity_case_verify_detail.xml @@ -106,26 +106,11 @@ android:text="案卷录音" android:textSize="@dimen/textFontSize" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 8914a5d..af34e8f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,15 +60,12 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); @Override @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -149,30 +140,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -218,10 +187,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 daa7451..530a77e 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -48,7 +46,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -60,7 +58,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -95,8 +92,6 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseOpinionView) @@ -105,8 +100,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -140,7 +135,6 @@ private String gridId;//可能来自案卷详情,也可能来自地图选点 private double longitude, latitude; private String changeState; - private MediaPlayer mediaPlayer; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; private ArrayList realPaths = new ArrayList<>();//真实图片路径 @@ -162,7 +156,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -255,30 +248,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -688,10 +659,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java new file mode 100644 index 0000000..f34a4d0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java @@ -0,0 +1,163 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.Handler; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; + +import androidx.annotation.DrawableRes; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; + +import java.io.IOException; + +public class AudioPlayerView extends AppCompatTextView { + + private static final int[] drawables = new int[]{R.drawable.ic_audio_icon1, R.drawable.ic_audio_icon2, R.drawable.ic_audio_icon3}; + private MediaPlayer mediaPlayer; + /** + * 在非初始化状态下调用setDataSource 会抛出IllegalStateException异常 + */ + private boolean hasPrepared = false; + private String mUrl; + private int index = 0; + private Handler audioAnimationHandler; + private Runnable animationRunnable; + + public AudioPlayerView(Context context, AttributeSet attrs) { + super(context, attrs); + initMediaPlayer(); + } + + private void initMediaPlayer() { + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + } catch (Exception e) { + Log.e("mediaPlayer", " init error", e); + } + if (mediaPlayer != null) { + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + hasPrepared = true; + setText(getAudioDuration()); + } + }); + mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + mp.reset(); + return false; + } + }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + stopAnimation(); + } + }); + } + setViewClick(); + } + + public String getAudioDuration() { + int duration = mediaPlayer.getDuration(); + if (duration == -1) { + return ""; + } else { + int sec = duration / 1000; + int m = sec / 60; + int s = sec % 60; + return m + ":" + s; + } + } + + public void setAudioUrl(String url) { + this.mUrl = url; + try { + mediaPlayer.setDataSource(url); + mediaPlayer.prepare(); + } catch (IOException | IllegalStateException e) { + Log.e("mediaPlayer", " set dataSource error", e); + } + } + + /** + * 用于需要设置不同的dataSource + * 二次setDataSource的时候需要reset 将MediaPlayer恢复到Initialized状态 + * + * @param url + */ + public void resetUrl(String url) { + if (TextUtils.isEmpty(mUrl) || hasPrepared) { + mediaPlayer.reset(); + } + setAudioUrl(url); + } + + private void startAnimation() { + if (audioAnimationHandler == null) { + audioAnimationHandler = new Handler(); + } + if (animationRunnable == null) { + animationRunnable = new Runnable() { + @Override + public void run() { + audioAnimationHandler.postDelayed(this, 200); + setDrawable(drawables[index % 3]); + index++; + } + }; + } + audioAnimationHandler.removeCallbacks(animationRunnable); + audioAnimationHandler.postDelayed(animationRunnable, 200); + } + + private void stopAnimation() { + setDrawable(drawables[2]); + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } + + //暂时只能设置在左边,后期改为可设置方向 + private void setDrawable(@DrawableRes int id) { + Drawable drawable = getResources().getDrawable(id); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + setCompoundDrawables(drawable, null, null, null); + } + + private void setViewClick() { + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + stopAnimation(); + } else { + mediaPlayer.seekTo(0); + startAnimation(); + mediaPlayer.start(); + } + } + }); + } + + public void release() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayer = null; + } + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java deleted file mode 100644 index cedc830..0000000 --- a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java +++ /dev/null @@ -1,160 +0,0 @@ -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/drawable/bg_audio_view.xml b/app/src/main/res/drawable/bg_audio_view.xml new file mode 100644 index 0000000..be7243e --- /dev/null +++ b/app/src/main/res/drawable/bg_audio_view.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_persuade_text.xml b/app/src/main/res/drawable/bg_pkg_persuade_text.xml deleted file mode 100644 index 29d4fe1..0000000 --- a/app/src/main/res/drawable/bg_pkg_persuade_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_punish_text.xml b/app/src/main/res/drawable/bg_pkg_punish_text.xml deleted file mode 100644 index 91ad460..0000000 --- a/app/src/main/res/drawable/bg_pkg_punish_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_warn_text.xml b/app/src/main/res/drawable/bg_pkg_warn_text.xml deleted file mode 100644 index b9cc363..0000000 --- a/app/src/main/res/drawable/bg_pkg_warn_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_audio_icon1.xml b/app/src/main/res/drawable/ic_audio_icon1.xml new file mode 100644 index 0000000..d31400e --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon1.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_audio_icon2.xml b/app/src/main/res/drawable/ic_audio_icon2.xml new file mode 100644 index 0000000..3abf4b5 --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon2.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_audio_icon3.xml b/app/src/main/res/drawable/ic_audio_icon3.xml new file mode 100644 index 0000000..848e68b --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon3.xml @@ -0,0 +1,15 @@ + + + + + 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 d5be6a9..1d21c58 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -65,26 +65,10 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_checked_detail.xml b/app/src/main/res/layout/activity_case_checked_detail.xml index ffc6e7d..653b8a1 100644 --- a/app/src/main/res/layout/activity_case_checked_detail.xml +++ b/app/src/main/res/layout/activity_case_checked_detail.xml @@ -1,6 +1,5 @@ @@ -69,26 +68,10 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_detail.xml b/app/src/main/res/layout/activity_case_detail.xml index 97ab7c6..e754c14 100644 --- a/app/src/main/res/layout/activity_case_detail.xml +++ b/app/src/main/res/layout/activity_case_detail.xml @@ -1,6 +1,5 @@ - - - + 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 cd878a0..d1550a1 100644 --- a/app/src/main/res/layout/activity_case_handle_detail.xml +++ b/app/src/main/res/layout/activity_case_handle_detail.xml @@ -43,27 +43,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_handled_detail.xml b/app/src/main/res/layout/activity_case_handled_detail.xml index 99786c1..27fa6d1 100644 --- a/app/src/main/res/layout/activity_case_handled_detail.xml +++ b/app/src/main/res/layout/activity_case_handled_detail.xml @@ -1,6 +1,5 @@ @@ -166,26 +165,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/res/layout/activity_case_todo_detail.xml b/app/src/main/res/layout/activity_case_todo_detail.xml index e08d8d0..345ca19 100644 --- a/app/src/main/res/layout/activity_case_todo_detail.xml +++ b/app/src/main/res/layout/activity_case_todo_detail.xml @@ -112,26 +112,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/res/layout/activity_case_todo_handled_detail.xml b/app/src/main/res/layout/activity_case_todo_handled_detail.xml index aced841..a929b43 100644 --- a/app/src/main/res/layout/activity_case_todo_handled_detail.xml +++ b/app/src/main/res/layout/activity_case_todo_handled_detail.xml @@ -1,6 +1,5 @@ @@ -165,26 +164,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index f61f26c..a4240be 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -53,36 +53,16 @@ - + - - - @@ -66,26 +65,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/res/layout/activity_case_verify_detail.xml b/app/src/main/res/layout/activity_case_verify_detail.xml index 0dd3d72..0c90a09 100644 --- a/app/src/main/res/layout/activity_case_verify_detail.xml +++ b/app/src/main/res/layout/activity_case_verify_detail.xml @@ -106,26 +106,11 @@ android:text="案卷录音" android:textSize="@dimen/textFontSize" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index c4b0fa6..0d2c4cc 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -1,8 +1,4 @@ - - - - - + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 6a7e4a3..06edfb2 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -40,6 +38,7 @@ import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -51,7 +50,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,8 +92,8 @@ TextView caseHandleTimeView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.addImageView) @@ -117,7 +115,6 @@ private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private ArrayList realPaths = new ArrayList<>();//真实图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter checkImageAdapter; @@ -133,8 +130,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -321,23 +316,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!mediaPlayer.isPlaying()) { - mediaPlayer.start(); - } - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -505,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f1bbfbc..241e778 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,16 +60,13 @@ RecyclerView caseHandleRecyclerView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -226,30 +217,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -278,10 +247,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 19e9e6c..d58d491 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -26,11 +24,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -65,10 +61,8 @@ RecyclerView caseHandleImageView; @BindView(R.id.caseCheckRecyclerView) RecyclerView caseCheckRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.handleRecordLayout) @@ -76,7 +70,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -97,8 +90,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -200,32 +191,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -281,10 +248,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 7c072a9..c03d474 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -44,7 +42,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -56,7 +54,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -87,8 +84,6 @@ TextView caseHandleView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseStartTimeView) @@ -101,8 +96,8 @@ RelativeLayout imageLayout; @BindView(R.id.caseHandleRecyclerView) RecyclerView caseHandleRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.reasonLayout) @@ -125,7 +120,6 @@ private CaseNextNodePresenterImpl caseNextNodePresenter; private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @@ -141,8 +135,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -208,30 +200,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -515,10 +485,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 06f157f..26bcf4b 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ RecyclerView casePicRecyclerView; @BindView(R.id.caseHandleImageView) RecyclerView caseHandleImageView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -170,30 +161,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -251,10 +220,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 c844e22..e7129e6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -33,12 +31,11 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -63,10 +60,8 @@ TextView caseDescriptionView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseHandleResultView) @@ -83,7 +78,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private MediaPlayer mediaPlayer; private QMUITipDialog submitDialog; @Override @@ -98,8 +92,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - title = getIntent().getStringExtra("title"); id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); @@ -200,30 +192,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -310,10 +280,8 @@ if (updateSupervisePresenter != null) { updateSupervisePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 d24b0ed..8d7ab49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -62,16 +58,13 @@ TextView caseSuperviseView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -92,8 +85,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -146,30 +137,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -227,10 +196,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 f482b7e..bbb7a0d 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -5,15 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; import android.media.MediaMetadataRetriever; -import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; @@ -52,7 +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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -68,7 +67,6 @@ import com.zolad.videoslimmer.VideoSlimmer; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -98,10 +96,10 @@ EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; - @BindView(R.id.voiceView) - ImageView voiceView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; + @BindView(R.id.recodeAudioButton) + ImageButton recodeAudioButton; @BindView(R.id.addVideoView) ImageView addVideoView; @BindView(R.id.videoPlayerView) @@ -110,8 +108,6 @@ ImageView addImageView; @BindView(R.id.selectedResultView) RecyclerView selectedResultView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -132,7 +128,6 @@ private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 private UploadAudioPresenterImpl uploadAudioPresenter; private ImageRecycleViewAdapter imageAdapter; - private MediaPlayer mediaPlayer; private String gridId; private UploadVideoPresenterImpl uploadVideoPresenter; private String audioUrl, videoUrl; @@ -181,7 +176,7 @@ @SuppressLint("ClickableViewAccessibility") @Override public void initEvent() { - voiceView.setOnTouchListener(this); + recodeAudioButton.setOnTouchListener(this); submitButton.setChangeAlphaWhenPress(true); //录音相关 View view = View.inflate(this, R.layout.popu_microphone, null); @@ -486,7 +481,7 @@ .animStyle(QMUIPopup.ANIM_AUTO) .dimAmount(0.6f)//60%透明度 .onDismiss(null) - .show(voiceView); + .show(recodeAudioButton); isFirstEnter = false; } } @@ -496,14 +491,14 @@ public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - voiceView.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); popWindow.showAtLocation(caseLayout, Gravity.CENTER, 0, 0); audioRecodeHelper.startRecordAudio(); break; case MotionEvent.ACTION_UP: - voiceView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) popWindow.dismiss(); + recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); break; } return true; @@ -556,31 +551,10 @@ /** * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a * */ - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer = new MediaPlayer(); - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioUrl)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepareAsync(); - } catch (IOException e) { - e.printStackTrace(); + if (!TextUtils.isEmpty(audioUrl)) { + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); } } @@ -732,10 +706,8 @@ if (uploadVideoPresenter != null) { uploadVideoPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 8914a5d..af34e8f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java @@ -2,8 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -25,11 +23,9 @@ 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.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -import java.io.IOException; import java.util.ArrayList; import butterknife.BindView; @@ -64,15 +60,12 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; private CaseDetailPresenterImpl caseDetailPresenter; - private MediaPlayer mediaPlayer; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); @Override @@ -94,8 +87,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); - String id = getIntent().getStringExtra("id"); caseDetailPresenter = new CaseDetailPresenterImpl(this); caseDetailPresenter.onReadyRetrofitRequest(id); @@ -149,30 +140,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -218,10 +187,8 @@ if (caseDetailPresenter != null) { caseDetailPresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } 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 daa7451..530a77e 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -48,7 +46,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.casic.dcms.widgets.AudioPlayerView; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; @@ -60,7 +58,6 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -95,8 +92,6 @@ TextView caseEndTimeView; @BindView(R.id.casePicRecyclerView) RecyclerView casePicRecyclerView; - @BindView(R.id.caseAudioButton) - QMUIRoundButton caseAudioButton; @BindView(R.id.videoPlayerView) JzvdStd videoPlayerView; @BindView(R.id.caseOpinionView) @@ -105,8 +100,8 @@ TextView caseConditionView; @BindView(R.id.caseVerifyRecyclerView) RecyclerView caseVerifyRecyclerView; - @BindView(R.id.voicePlayView) - VoicePlayView voicePlayView; + @BindView(R.id.audioPlayerView) + AudioPlayerView audioPlayerView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.submitButton) @@ -140,7 +135,6 @@ private String gridId;//可能来自案卷详情,也可能来自地图选点 private double longitude, latitude; private String changeState; - private MediaPlayer mediaPlayer; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; private ArrayList realPaths = new ArrayList<>();//真实图片路径 @@ -162,7 +156,6 @@ @Override public void initData() { - mediaPlayer = new MediaPlayer(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -255,30 +248,8 @@ //音频 String audioFile = data.getAudioIdVerify(); if (!TextUtils.isEmpty(audioFile)) { - caseAudioButton.setVisibility(View.VISIBLE); - try { - mediaPlayer.setDataSource(StringHelper.appendCompleteURL(audioFile)); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mediaPlayer.prepare(); - } catch (IOException e) { - e.printStackTrace(); - } - caseAudioButton.setChangeAlphaWhenPress(true); - caseAudioButton.setOnClickListener(new View.OnClickListener() { - @Override - 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(); - } - }); + audioPlayerView.setVisibility(View.VISIBLE); + audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); } //视频 @@ -688,10 +659,8 @@ if (caseHandlePresenter != null) { caseHandlePresenter.disposeRetrofitRequest(); } - if (mediaPlayer != null) { - mediaPlayer.reset(); - mediaPlayer.release(); - mediaPlayer = null; + if (audioPlayerView != null) { + audioPlayerView.release(); } } diff --git a/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java new file mode 100644 index 0000000..f34a4d0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/AudioPlayerView.java @@ -0,0 +1,163 @@ +package com.casic.dcms.widgets; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.Handler; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; + +import androidx.annotation.DrawableRes; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; + +import java.io.IOException; + +public class AudioPlayerView extends AppCompatTextView { + + private static final int[] drawables = new int[]{R.drawable.ic_audio_icon1, R.drawable.ic_audio_icon2, R.drawable.ic_audio_icon3}; + private MediaPlayer mediaPlayer; + /** + * 在非初始化状态下调用setDataSource 会抛出IllegalStateException异常 + */ + private boolean hasPrepared = false; + private String mUrl; + private int index = 0; + private Handler audioAnimationHandler; + private Runnable animationRunnable; + + public AudioPlayerView(Context context, AttributeSet attrs) { + super(context, attrs); + initMediaPlayer(); + } + + private void initMediaPlayer() { + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + } catch (Exception e) { + Log.e("mediaPlayer", " init error", e); + } + if (mediaPlayer != null) { + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + hasPrepared = true; + setText(getAudioDuration()); + } + }); + mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + mp.reset(); + return false; + } + }); + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + stopAnimation(); + } + }); + } + setViewClick(); + } + + public String getAudioDuration() { + int duration = mediaPlayer.getDuration(); + if (duration == -1) { + return ""; + } else { + int sec = duration / 1000; + int m = sec / 60; + int s = sec % 60; + return m + ":" + s; + } + } + + public void setAudioUrl(String url) { + this.mUrl = url; + try { + mediaPlayer.setDataSource(url); + mediaPlayer.prepare(); + } catch (IOException | IllegalStateException e) { + Log.e("mediaPlayer", " set dataSource error", e); + } + } + + /** + * 用于需要设置不同的dataSource + * 二次setDataSource的时候需要reset 将MediaPlayer恢复到Initialized状态 + * + * @param url + */ + public void resetUrl(String url) { + if (TextUtils.isEmpty(mUrl) || hasPrepared) { + mediaPlayer.reset(); + } + setAudioUrl(url); + } + + private void startAnimation() { + if (audioAnimationHandler == null) { + audioAnimationHandler = new Handler(); + } + if (animationRunnable == null) { + animationRunnable = new Runnable() { + @Override + public void run() { + audioAnimationHandler.postDelayed(this, 200); + setDrawable(drawables[index % 3]); + index++; + } + }; + } + audioAnimationHandler.removeCallbacks(animationRunnable); + audioAnimationHandler.postDelayed(animationRunnable, 200); + } + + private void stopAnimation() { + setDrawable(drawables[2]); + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } + + //暂时只能设置在左边,后期改为可设置方向 + private void setDrawable(@DrawableRes int id) { + Drawable drawable = getResources().getDrawable(id); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + setCompoundDrawables(drawable, null, null, null); + } + + private void setViewClick() { + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + stopAnimation(); + } else { + mediaPlayer.seekTo(0); + startAnimation(); + mediaPlayer.start(); + } + } + }); + } + + public void release() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayer = null; + } + if (audioAnimationHandler != null) { + audioAnimationHandler.removeCallbacks(animationRunnable); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java b/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java deleted file mode 100644 index cedc830..0000000 --- a/app/src/main/java/com/casic/dcms/widgets/VoicePlayView.java +++ /dev/null @@ -1,160 +0,0 @@ -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/drawable/bg_audio_view.xml b/app/src/main/res/drawable/bg_audio_view.xml new file mode 100644 index 0000000..be7243e --- /dev/null +++ b/app/src/main/res/drawable/bg_audio_view.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_persuade_text.xml b/app/src/main/res/drawable/bg_pkg_persuade_text.xml deleted file mode 100644 index 29d4fe1..0000000 --- a/app/src/main/res/drawable/bg_pkg_persuade_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_punish_text.xml b/app/src/main/res/drawable/bg_pkg_punish_text.xml deleted file mode 100644 index 91ad460..0000000 --- a/app/src/main/res/drawable/bg_pkg_punish_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_pkg_warn_text.xml b/app/src/main/res/drawable/bg_pkg_warn_text.xml deleted file mode 100644 index b9cc363..0000000 --- a/app/src/main/res/drawable/bg_pkg_warn_text.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_audio_icon1.xml b/app/src/main/res/drawable/ic_audio_icon1.xml new file mode 100644 index 0000000..d31400e --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon1.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_audio_icon2.xml b/app/src/main/res/drawable/ic_audio_icon2.xml new file mode 100644 index 0000000..3abf4b5 --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon2.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_audio_icon3.xml b/app/src/main/res/drawable/ic_audio_icon3.xml new file mode 100644 index 0000000..848e68b --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_icon3.xml @@ -0,0 +1,15 @@ + + + + + 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 d5be6a9..1d21c58 100644 --- a/app/src/main/res/layout/activity_case_check_detail.xml +++ b/app/src/main/res/layout/activity_case_check_detail.xml @@ -65,26 +65,10 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_checked_detail.xml b/app/src/main/res/layout/activity_case_checked_detail.xml index ffc6e7d..653b8a1 100644 --- a/app/src/main/res/layout/activity_case_checked_detail.xml +++ b/app/src/main/res/layout/activity_case_checked_detail.xml @@ -1,6 +1,5 @@ @@ -69,26 +68,10 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_detail.xml b/app/src/main/res/layout/activity_case_detail.xml index 97ab7c6..e754c14 100644 --- a/app/src/main/res/layout/activity_case_detail.xml +++ b/app/src/main/res/layout/activity_case_detail.xml @@ -1,6 +1,5 @@ - - - + 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 cd878a0..d1550a1 100644 --- a/app/src/main/res/layout/activity_case_handle_detail.xml +++ b/app/src/main/res/layout/activity_case_handle_detail.xml @@ -43,27 +43,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + diff --git a/app/src/main/res/layout/activity_case_handled_detail.xml b/app/src/main/res/layout/activity_case_handled_detail.xml index 99786c1..27fa6d1 100644 --- a/app/src/main/res/layout/activity_case_handled_detail.xml +++ b/app/src/main/res/layout/activity_case_handled_detail.xml @@ -1,6 +1,5 @@ @@ -166,26 +165,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/res/layout/activity_case_todo_detail.xml b/app/src/main/res/layout/activity_case_todo_detail.xml index e08d8d0..345ca19 100644 --- a/app/src/main/res/layout/activity_case_todo_detail.xml +++ b/app/src/main/res/layout/activity_case_todo_detail.xml @@ -112,26 +112,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/res/layout/activity_case_todo_handled_detail.xml b/app/src/main/res/layout/activity_case_todo_handled_detail.xml index aced841..a929b43 100644 --- a/app/src/main/res/layout/activity_case_todo_handled_detail.xml +++ b/app/src/main/res/layout/activity_case_todo_handled_detail.xml @@ -1,6 +1,5 @@ @@ -165,26 +164,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index f61f26c..a4240be 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -53,36 +53,16 @@ - + - - - @@ -66,26 +65,11 @@ style="@style/noPointTextViewStyle" android:text="案卷录音" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/res/layout/activity_case_verify_detail.xml b/app/src/main/res/layout/activity_case_verify_detail.xml index 0dd3d72..0c90a09 100644 --- a/app/src/main/res/layout/activity_case_verify_detail.xml +++ b/app/src/main/res/layout/activity_case_verify_detail.xml @@ -106,26 +106,11 @@ android:text="案卷录音" android:textSize="@dimen/textFontSize" /> - - - + android:background="@drawable/bg_audio_view" /> diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index c4b0fa6..0d2c4cc 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -1,8 +1,4 @@ - - - - - + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index daf591b..70e18b7 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -8,6 +8,24 @@ @color/colorAccent + +