/**?復(fù)寫onTouchEvent?*/
@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:
changeState(STATE_RECORDING);
break;
case?MotionEvent.ACTION_MOVE:
if?(isRecording)?{//?是否在錄音
/*?根據(jù)x,y的坐標(biāo)來(lái)判斷是否想要取消?*/
if?(wantToCancel(x,?y))?{
changeState(STATE_WANT_TO_CANCEL);
}?else?{
changeState(STATE_RECORDING);
}
}
break;
case?MotionEvent.ACTION_UP:
/*
?*?五種情況?1、down以后還沒觸發(fā)longclick?2、down以后觸發(fā)longClick還沒有prepaer完畢就松開了
?*?3、錄音時(shí)間很短,沒有達(dá)到我們?cè)O(shè)定的值?4、?5、
?*/
if?(!mReady)?{
reset();
super.?onTouchEvent(event);
}
if?(!isRecording?||?mTime?<?0.6f)?{
mDialogManager.tooShort();
mAudioManager.cancel();
mHandler.sendEmptyMessageDelayed(MSG_DIALOG_DIMISS,?1300);
}else?if?(mCurState?==?STATE_RECORDING)?{//正常錄制結(jié)束
mDialogManager.dimissDialog();
mAudioManager.release();
if?(mListener!=null)?{
mListener.onFinish(mTime,?mAudioManager.getCurrentFilePath());
}
}?else?if?(mCurState?==?STATE_WANT_TO_CANCEL)?{
mDialogManager.dimissDialog();
mAudioManager.cancel();
}
reset();
break;
}
return?super.onTouchEvent(event);
}
/**?恢復(fù)狀態(tài)以及標(biāo)志位?*/
private?void?reset()?{
isRecording?=?false;
mReady?=?false;
mTime?=?0;
changeState(STATE_NORMAL);
}
private?boolean?wantToCancel(int?x,?int?y)?{
if?(x?<?0?||?x?>?getWidth())?{
return?true;
}
if?(y?<?-DISTANCE_Y_CANCEL?||?y?>?getHeight()?+?DISTANCE_Y_CANCEL)?{
return?true;
}
return?false;
}
2015-05-26
按一下就放,UP時(shí)進(jìn)入的邏輯可能是!Ready,你上面的代碼少寫了return: