I'm following Detecting common gestures guide. I have linked to android-support-v4.jar
library to get GestureDetectorCompat
, and my code seems exactly the same as in the guide, except I'm detecting gestures in my custom view rather than in activity:
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()));
}
}
No matter what I do with the touchscreen, I'm only getting onLongPress
. In fact, when I do fast tap (quickly touching and releasing the screen) I still get onLongPress
slightly after I remove my finger from the screen ( suspect that's a long tap detection delay).
What's the catch?
return super.onTouchEvent(event);
toreturn false;
? And try yours actions on the Simple View (such as WebView like example). – Vastitudereturn false;
doesn't change anything. – PepsinogenonDown
method which returns true to youronTouchEvent
method. – VastitudeonLongPress
becauseMotionEvent.ACTION_DOWN
never processed\accesed on your gestureDetector. You always will giveACTION_UP
. Why no ACTION_MOVE? Because in Android Action_Move precessed after he give Action_UP. So gesture detector will be processed your actions like a long press. – VastitudeonDown
is not abstract... – Pepsinogen