我正在跟进检测常见手势指导。我已经链接到android-support-v4.jar
库来获取GestureDetectorCompat
,我的代码看起来与指南中的完全相同,除了我在自定义视图中而不是在活动中检测手势:
public class MyGlView extends GLSurfaceView {
private GestureDetectorCompat m_gestureDetector = null;
public MyGlView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public MyGlView(Context context) {
super(context);
init(context);
}
private void init(Context context) {
if (m_gestureDetector == null)
m_gestureDetector = new GestureDetectorCompat(context, new MyGestureListener());
setEGLContextClientVersion(2);
setRenderer(new DrawSurfRenderer());
setRenderMode(RENDERMODE_CONTINUOUSLY);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
m_gestureDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}
public class MyGestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
{
Log.e("", "OnScroll: deltaX=" + String.valueOf(e2.getX() - e1.getX()) + ", deltaY=" + String.valueOf(e2.getY() - e1.getY()));
return true;
}
@Override
public boolean onSingleTapUp(MotionEvent e)
{
Log.e("", "onSingleTapUp: X=" + String.valueOf(e.getX()) + ", Y=" + String.valueOf(e.getY()));
return true;
}
@Override
public void onLongPress(MotionEvent e)
{
Log.e("", "onLongPress: X=" + String.valueOf(e.getX()) + ", Y=" + String.valueOf(e.getY()));
}
}
无论我用触摸屏做什么,我都只会得到onLongPress
。事实上,当我快速点击(快速触摸并释放屏幕)时,我仍然得到onLongPress
在我将手指从屏幕上移开后不久(怀疑这是长时间的点击检测延迟)。
有什么问题吗?
I quote Android 检测常见手势指南:
无论您是否使用 GestureDetector.OnGestureListener,最佳实践都是实现返回 true 的 onDown() 方法。这是因为所有手势都以 onDown() 消息开始。如果从 onDown() 返回 false(默认情况下 GestureDetector.SimpleOnGestureListener 会这样做),系统会假定您要忽略手势的其余部分,并且永远不会调用 GestureDetector.OnGestureListener 的其他方法。这有可能在您的应用程序中导致意外问题。唯一应该从 onDown() 返回 false 的情况是当您确实想忽略整个手势时。
事实上,你没有实施onDown()
方法会产生副作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)