我正在遵循检测常见手势指南。我已经链接了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
(怀疑是长按检测延迟)。有什么问题吗?
return super.onTouchEvent(event);
更改为return false;
吗?并在简单视图上尝试您的操作(例如 WebView)。 - user2558337return false;
不会改变任何东西。 - Violet GiraffeonTouchEvent
方法中添加返回true的onDown
方法。 - user2558337onDown
不是抽象的... - Violet Giraffe