我的问题很简单,实现 GestureListener 时的 onUp 事件在哪里?
我在手势检测器上有很多事件,不能只消耗监听器的 onUp 事件,因为其中一个事件是需要它的 onSingleTapConfirmed。
我的问题很简单,实现 GestureListener 时的 onUp 事件在哪里?
我在手势检测器上有很多事件,不能只消耗监听器的 onUp 事件,因为其中一个事件是需要它的 onSingleTapConfirmed。
尝试使用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;
}
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);
}
});
其他答案可以解决这个问题,也许它们效果很好,但我认为这些不是很好的解决方案。
因为我们应该在一个模块中处理事件,这样我们可以更容易地维护或扩展代码。
(顺便说一句,不要使用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
}
}
:)
您是否从您在 GestureDetector.OnGestureListener 中使用的其他事件返回 true?我遇到了这个问题,事实证明,如果您返回 false,系统会假定您不感兴趣并停止向您传递事件,所以您错过了!