27

我的问题很简单,实现 GestureListener 时的 onUp 事件在哪里?

我在手势检测器上有很多事件,不能只消耗监听器的 onUp 事件,因为其中一个事件是需要它的 onSingleTapConfirmed。

4

4 回答 4

26

尝试使用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;
}
于 2011-05-12T23:16:59.953 回答
8

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);
    }
});
于 2011-05-19T22:46:05.893 回答
6

其他答案可以解决这个问题,也许它们效果很好,但我认为这些不是很好的解决方案。
因为我们应该在一个模块中处理事件,这样我们可以更容易地维护或扩展代码。
(顺便说一句,不要使用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
    }
} 

:)

于 2017-06-11T05:49:33.860 回答
2

您是否从您在 GestureDetector.OnGestureListener 中使用的其他事件返回 true?我遇到了这个问题,事实证明,如果您返回 false,系统会假定您不感兴趣并停止向您传递事件,所以您错过了!

于 2011-07-06T15:44:29.980 回答