我正在遵循Detecting common gestures指南。我已链接到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
(怀疑这是一个很长的点击检测延迟)。有什么发现?
最佳答案
我引用Android Guide on Detecting Common Gestures:
无论您是否使用gesturedector.ongesturelistener,最好实现返回true的ondown()方法。这是因为所有手势都以ondown()消息开头。如果从ondown()返回false(默认情况下是gesturedector.simpleOngestureListener),则系统假设您要忽略手势的其余部分,并且永远不会调用gesturedector.ongestureListener的其他方法。这可能会导致应用程序出现意外问题。唯一应该从ondown()返回false的时间是,是否确实要忽略整个手势。
您没有实现onDown()
方法的事实导致了副作用。