Подтвердить что ты не робот

Событие OnUp на GestureDetector

Мой вопрос прост, где событие onUp при реализации GestureListener?

У меня есть много событий на gesturedetector и не может просто потреблять событие onUp слушателя, потому что одно из событий - это onSingleTapConfirmed, которому это нужно.

4b9b3361

Ответ 1

Попробуйте использовать onFling(). Кажется, это странное имя, но для меня оно работает, поскольку метод onUp() будет логически работать. Или попробуйте этот метод...

@Override
public boolean onTouchEvent(MotionEvent me) {

  Log.v("ADAM", "ontouch: " + me.getAction());

  if(me.getAction() == 0){
    Log.v("ADAM", "Down");
  }
  else if (me.getAction() == 1) {
    Log.v("ADAM", "Up");
  }
  else if (me.getAction() == 2) {
    Log.v("ADAM", "Scroll");
  }
  boolean detectedUp = event.getAction() == MotionEvent.ACTION_UP;
  if (!mGestureDetector.onTouchEvent(event) && detectedUp) {
    return onUp(event);
  }
  return true;
}

Ответ 2

Я зафиксировал его, прочитав Action event, прежде чем передать его в GestureListener

img.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View arg0, MotionEvent arg1) {
      if (arg1.getAction() == MotionEvent.ACTION_UP
          && !getDocument().isScaled()) 
        img.notifyUp();
      return gestures.onTouchEvent(arg1);
    }
});

Ответ 3

Вы вернулись из других событий, которые вы потребляете в своем GestureDetector.OnGestureListener? У меня была эта проблема, и оказалось, что если вы вернете false, система предполагает, что вы не заинтересованы и перестаете передавать вам события, поэтому вы пропустите вверх!

Ответ 4

Другие ответы могут решить вопрос, может быть, они работают хорошо, но я не думаю, что это хорошие решения.
Потому что мы должны иметь дело с событием в одном moudle, чтобы мы могли быть esaier для поддержки или расширения кода.
(Кстати, не используйте onFilng(), если ваш палец медленно движется по экрану, onFilng() не будет работать)
Итак, мое решение переписывает GestureDetector:

public class ModifyGestureDetector extends GestureDetector {

    MyGestureListener myGestureListener;

    public ModifyGestureDetector(Context context, OnGestureListener listener) {
        super(context, listener);
        init(listener);
    }

    void init(OnGestureListener listener){
        if (listener instanceof MyGestureListener){
            myGestureListener = (MyGestureListener) listener;
        }
    }

    //u can write something more complex as long as u need
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        if(ev.getAction() == MotionEvent.ACTION_UP 
            && myGestureListener != null){
            myGestureListener.onUp(ev);
        }
        return super.onTouchEvent(ev);
    }

    public interface MyGestureListener{
        public void onUp(MotionEvent ev);
    }
}  

И слушатель:

public class MyGestureListener extends GestureDetector.SimpleOnGestureListener
        implements ModifyGestureDetector.MyGestureListener {


    @Override
    public void onUp(MotionEvent ev) {
        //do what u want
    }
} 

:)