【发布时间】:2013-11-12 18:52:24
【问题描述】:
我正在关注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(怀疑这是一个长的点击检测延迟)。
有什么收获?
【问题讨论】:
-
您是否尝试将
return super.onTouchEvent(event);更改为return false;?并在 Simple View 上尝试您的操作(例如 WebView 示例)。 -
@R.id.pandacoder:
return false;不会改变任何东西。 -
经过一番调查,我认为您可以尝试添加
onDown方法,该方法返回 true 到您的onTouchEvent方法。 -
您将始终提供
onLongPress,因为您的手势检测器上从未处理过MotionEvent.ACTION_DOWN。你总是会给ACTION_UP。为什么没有 ACTION_MOVE?因为在Android Action_Move 进动之后他给了Action_UP。所以手势检测器会像长按一样处理你的动作。 -
@R.id.pandacoder:谢谢!没有默认实现,或者
onDown不是抽象的,这似乎很愚蠢……
标签: android gesture-recognition gestures