即使用户没有从Android视图中释放触摸,如何以编程方式取消OnTouchListener回调?

时间:2018-05-20 17:21:45

标签: android animation events touch listener

我正在制作录音应用程序。它的工作方式是当用户按下并移动记录按钮时,按钮随手指一起移动。我创建了一个边界,当手指穿过那个边界时,我希望按钮执行hide()动画并返回到原始位置。

如果发生MotionEvent.ACTION_UPMotionEvent.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);

1 个答案:

答案 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;
    }
};