4.录音类里有两个成员:录音长度,录音路径。
下面贴一下代码:
自定义Button
package com.zms.wechatrecorder.view;
import com.zms.wechatrecorder.MyAudioManager;
import com.zms.wechatrecorder.MyAudioManager.AudioStateChangeListener;
import com.zms.wechatrecorder.R;
import android.content.Context;
import android.os.Environment;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.MotionEvent;
impo
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
rt android.view.View;
import android.widget.Button;
public class AudioRecordButton extends Button {
private static final int STATE_NORMAL = 1;
private static final int STATE_RECORDING = 2;
private static final int STATE_WANT_CANCEL = 3;
private static final int DISTANCE_CANCEL_Y = 50;
private int currentState = STATE_NORMAL;
private boolean isRecording = false;
private AudioRecordDialog dialogManager;
private MyAudioManager audioManager;
private float mTime;
// 是否触发LongClick
private boolean isReady = false;
public AudioRecordButton(Context context) {
this(context, null);
}
public AudioRecordButton(Context context, AttributeSet attrs) {
super(context, attrs);
dialogManager = new AudioRecordDialog(getContext());
String dir = Environment.getExternalStorageDirectory()
- “/zms_chat_audios”;
audioManager = MyAudioManager.getInstance(dir);
audioManager
.setOnAudioStateChangeListener(new MyOnAudioStateChangeListener());
setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
isReady = true;
audioManager.prepareAudio();
return false;
}
});
}
class MyOnAudioStateChangeListener implements AudioStateChangeListener {
@Override
public void wellPrepared() {
mHanlder.sendEmptyMessage(MSG_AUDIO_PREPARED);
}
}
/**
-
录音完成后的回调
*/
public interface AudioRecordFinishListener {
void onFinish(float second, String filePath);
}
private AudioRecordFinishListener audioRecordFinishListener;<