Как программно отменить обратный вызов OnTouchListener, даже если пользователь не отключил сенсорный экран из представления в Android? - PullRequest
0 голосов
/ 20 мая 2018

Я работаю над приложением Audio Recording.Это работает так, что когда пользователь нажимает и перемещает кнопку записи, кнопка перемещается вместе с пальцем.Я создал границу, и когда палец пересекает эту границу, я хочу, чтобы кнопка выполняла анимацию 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);

1 Ответ

0 голосов
/ 20 мая 2018

Чтобы разблокировать onTouchListener для любого View, установите для слушателя значение null.

recordMsgButton.setOnTouchListener(null);

или

После выполнения условия вы можетеустановите для этого другого слушателя View.

Создайте другого слушателя

public final OnTouchListener mTouchListener = new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent rawEvent) {
        return false;
    }
}; 

Если вы хотите отключить слушателя, установите другого слушателя на это представление

v.setOnTouchListener(mTouchListener);
...