有段时间没有看视频了,昨天晚上抽了点空时间,又看了下鸿洋大神的视频教程,又抽时间写了个学习记录。代码和老师讲的基本一样,网上也有很多相同的博客。我只是在AndroidStudio环境下写的。
—-主界面代码——
public class MainActivity extends Activity {
private ListView mListView;
private ArrayAdapter mAdapter;
private List mDatas = new ArrayList();
private AudioRecorderButton mAudioRecorderButton;
private View animView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.id_listview);
mAudioRecorderButton = (AudioRecorderButton) findViewById(R.id.id_recorder_button);
mAudioRecorderButton.setFinishRecorderCallBack(new AudioRecorderButton.AudioFinishRecorderCallBack() {
public void onFinish(float seconds, String filePath) {
Recorder recorder = new Recorder(seconds, filePath);
mDatas.add(recorder);
//更新数据
mAdapter.notifyDataSetChanged();
//设置位置
mListView.setSelection(mDatas.size() - 1);
}
});
mAdapter = new RecoderAdapter(this, mDatas);
mListView.setAdapter(mAdapter);
//listView的item点击事件
mListView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView> arg0, View view, int position, long id) {
// 声音播放动画
if (animView != null) {
animView.setBackgroundResource(R.drawable.adj);
animView = null;
}
animView = view.findViewById(R.id.id_recoder_anim);
animView.setBackgroundResource(R.drawable.play_anim);
AnimationDrawable animation = (AnimationDrawable) animView.getBackground();
animation.start();
// 播放录音
MediaPlayerManager.playSound(mDatas.get(position).filePath, new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
//播放完成后修改图片
animView.setBackgroundResource(R.drawable.adj);
}
});
}
});
}
@Override
protected void onPause() {
super.onPause();
MediaPlayerManager.pause();
}
@Override
protected void onResume() {
super.onResume();
MediaPlayerManager.resume();
}
@Override
protected void onDestroy() {
super.onDestroy();
MediaPlayerManager.release();
}
—自定义Button——-
/**
* @param
* @author ldm
* @description 自定义Button
* @time 2016/6/25 9:26
*/
public class AudioRecorderButton extends Button {
// 按钮正常状态(默认状态)
private static final int STATE_NORMAL = 1;
//正在录音状态
private static final int STATE_RECORDING = 2;
//录音取消状态
private static final int STATE_CANCEL = 3;
//记录当前状态
private int mCurrentState = STATE_NORMAL;
//是否开始录音标志
private boolean isRecording = false;
//判断在Button上滑动距离,以判断 是否取消
private static final int DISTANCE_Y_CANCEL = 50;
//对话框管理工具类
private DialogManager mDialogManager;
//录音管理工具类
private AudioManager mAudioManager;
//记录录音时间
private float mTime;
// 是否触发longClick
private boolean mReady;
//录音准备
private static final int MSG_AUDIO_PREPARED = 0x110;
//音量发生改变
private static final int MSG_VOICE_CHANGED = 0x111;
//取消提示对话框
private static final int MSG_DIALOG_DIMISS = 0x112;
/**
* @description 获取音量大小的线程
* @author ldm
* @time 2016/6/25 9:30
* @param
*/
private Runnable mGetVoiceLevelRunnable = new Runnable() {
public void run() {
while (isRecord