手势检测器上的OnUp事件
我的问题很简单,实现GestureListener时onUp事件是哪里?手势检测器上的OnUp事件
我在gesturedetector上有很多事件,并且不能仅仅使用侦听器的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;
}
我在通过GestureListener之前阅读通风口来解决这个问题(onFling绝对无用) – 2011-05-19 22:47:34
很好的答案,只是想补充说onFling并不是完全没用 - 它可以帮助您区分滚动和滑动。虽然当你认为你只是举起手指时,经常会发生一些事情,但你可以通过检查onFling处理程序中的速度参数来筛选出不重要的。 – 2012-02-06 06:27:30
当您执行滑动操作时,并不总是发生OnFling事件。最值得注意的是,如果你在刷完之前轻扫但停止移动你的手指一会儿,通常就没有事件发生。 – 2012-11-08 00:59:38
我通过阅读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);
}
});
你从你在GestureDetector.OnGestureListener消耗其他事件返回真?我遇到了这个问题,事实证明如果你返回false,那么系统假定你不感兴趣并且不会传递你的事件,所以你错过了!
其他答案可以解决这个问题,也许他们工作很好,但我不认为这些问题是很好的解决方案。
因为我们应该在单个模块中处理事件,所以我们可以保持或扩展代码。
(顺便说一下,不要不使用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
}
}
:)
我不是很确定你想在这里做什么,但有'onSingleTapUp'在'g^estureListener'这可能是你在找什么。尽管如此,它还是被完全点燃了,而不是轻扫。为此,您可以只处理视图/活动的“原始”onTouchEvent而不传递给“GestureDetector”。 – Xion 2011-04-19 22:09:25
点击完成后,会触发onSingleTapUp。我需要DOWN,然后MOVE,然后以UP结束。 – 2011-04-19 23:15:22
这是'onFling',除了你没有得到MOVE事件。如果你需要它们,我想你唯一的选择就是直接处理'onTouchEvent'。 – Xion 2011-04-20 07:31:17