Событие OnUp на GestureDetector - PullRequest
24 голосов
/ 20 апреля 2011

У меня простой вопрос: где происходит событие onUp при реализации GestureListener?

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

Ответы [ 4 ]

23 голосов
/ 13 мая 2011

Попробуйте использовать 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;
}
5 голосов
/ 20 мая 2011

Я исправил это, прочитав 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 голосов
/ 11 июня 2017

Другие ответы могут решить вопрос, может быть, они работают хорошо, но я не думаю, что это хорошие решения.
Потому что мы должны иметь дело с событием в одну минуту, чтобы мы могли быть более уверенными в поддержанииили разверните код.
(Кстати, не используйте 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
    }
} 

:)

2 голосов
/ 06 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...