我正在制作录音应用程序。它的工作方式是当用户按下并移动记录按钮时,按钮随手指一起移动。我创建了一个边界,当手指穿过那个边界时,我希望按钮执行hide()
动画并返回到原始位置。
如果发生MotionEvent.ACTION_UP
或MotionEvent.ACTION_CANCEL
事件,整个过程都可以正常工作,但即使触摸越过边界,hide()
操作也不会发生。有时当按钮位于边界外时,按钮会进行前后运动。即使我将视图的visibility
设置为false
,仍会调用触摸事件。
我也在logcat中获得输出(Log.e("MSG","boundary crossed");
)。
这是代码:
int recordButtonStartX;
microPhoneListner=new View.OnTouchListener() {
@Override
public boolean onTouch(View v, final MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
recordButtonStartX = (int) event.getX();
this.floatingRecordButton.display(event.getX());
}
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
this.floatingRecordButton.hide(event.getX());
break;
case MotionEvent.ACTION_MOVE:
int tempX = (int) event.getX();
if ((recordButtonStartX - tempX) > 200) {
Log.e("MSG","boundary crossed");
this.floatingRecordButton.hide(event.getX());
}
else
{
this.floatingRecordButton.moveTo(event.getX());
}
break;
}
recordMsgButton.setOnTouchListener(microPhoneListner);
答案 0 :(得分:1)
要释放任何onTouchListener
的{{1}},请将听众设为View
。
null
或强>
在满足条件后,您可以将其他听众设置为recordMsgButton.setOnTouchListener(null);
。
制作另一个听众
View
如果要禁用侦听器,请将其他侦听器设置为该视图
public final OnTouchListener mTouchListener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent rawEvent) {
return false;
}
};