80,350
社区成员
发帖
与我相关
我的任务
分享
package com.example.view;
import com.example.weinxin.R;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Button;
public class AutioRecordButton extends Button {
private static final int DISTANCE_Y_CANCEL = 50;
private static final int STATE_NORMAL = 1;
private static final int STATE_RECORDING = 2;
private static final int STATE_WANT_CANCEL = 3;
int mCurState = STATE_NORMAL;
private boolean isRecording = false;
// 新建的button的构造方法
public AutioRecordButton(Context context) {
super(context,null);
}
public AutioRecordButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
int x = (int) event.getX();
int y = (int) event.getY();
switch (action) {
case MotionEvent.ACTION_DOWN:
// TODO
isRecording = true;
changeState(STATE_NORMAL);
break;
case MotionEvent.ACTION_MOVE:
if (isRecording) {
if (wantTocancel(x, y)) {
changeState(STATE_WANT_CANCEL);
} else {
changeState(STATE_RECORDING);
}
}
break;
case MotionEvent.ACTION_UP:
if (mCurState == STATE_RECORDING) {
// relese
// callback
} else if (mCurState == STATE_WANT_CANCEL) {
//
}
// 重新设置标志位,
reset();
break;
}
return super.onTouchEvent(event);
}
private void reset() {
isRecording = false;
changeState(STATE_NORMAL);
}
/*
* 判断取消时的情况,x和Y的方向的位置。
*/
private boolean wantTocancel(int x, int y) {
if (x < 0 || x > getWidth()) {
return true;
} else if (y < DISTANCE_Y_CANCEL || y > DISTANCE_Y_CANCEL + getHeight()) {
return true;
}
return false;
}
/*
* 改变按钮的状态,来判定按钮是不是在执行什么,以及显示的dialog的内容
*/
private void changeState(int state) {
// todo 判断当前的状态
if (mCurState != state) {
switch (mCurState) {
case STATE_NORMAL:
setBackgroundResource(R.drawable.btn_record_normal);
setText(R.string.str_record_normal);
break;
case STATE_RECORDING:
setBackgroundResource(R.drawable.btn_record_recording);
setText(R.string.str_record_recording);
if (isRecording) {
// Dialog.recording,对话框也要显示录音
}
break;
case STATE_WANT_CANCEL:
setBackgroundResource(R.drawable.btn_record_recording);
setText(R.string.str_record_want_cancel);
if (isRecording) {
// dialog.cancel,显示取消录音 dimiss
}
break;
}
}
}
}