下了个例子,按下和长按都好使,但是滑动取消录音这个不好使。只能上网搜啊,
第一个解决办法:在onclick事件方法中增加CANCEL的case,如:
case MotionEvent.ACTION_CANCEL:
if (RECODE_STATE == RECORD_ING) {
RECODE_STATE=RECODE_NO;
if (dialog.isShowing()) {
dialog.dismiss();
}
try {
mr.stop();
voiceValue = 0.0;
} catch (IOException e) {
e.printStackTrace();
}
record.setText("按住开始录音");
//RECODE_STATE=RECORD_NO;
}
break;
可是不好使啊。再换
第二个解决办法:在onclick事件方法中增加MOVE的case,如:
case MotionEvent.ACTION_MOVE:// 当手指移动到view外面,会cancel
if (RECODE_STATE == RECORD_ING) {
RECODE_STATE=RECODE_ED;
if (dialog.isShowing()) {
dialog.dismiss();
}
try {
mr.stop();
voiceValue = 0.0;
} catch (IOException e) {
e.printStackTrace();
}
scanOldFile();
}
break;
还tm不好使。再换。
第三个解决办法:在搜索拖拽取消滑动时,无意中发现可以算出拖拽距离,有灵感了呀,直接算出手指滑动后抬起时的滑动距离(X轴,Y轴分别的距离),判断如果Y轴滑动距离大于100dips(abs算出绝对值),则算作取消录音。整个业务逻辑都在ACTION_UP中实现:
这样就可以了