Vio*_*ffe 9 android gesture-recognition 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()));
}
}
Run Code Online (Sandbox Code Playgroud)
无论我使用触摸屏做什么,我只会得到onLongPress.事实上,当我快速点击(快速触摸和释放屏幕)时,我仍然会onLongPress在屏幕上移开手指后稍微有点(怀疑是长时间的检测延迟).
有什么收获?
ive*_*cru 20
我引用Android检测常见手势指南:
无论您是否使用GestureDetector.OnGestureListener,最佳实践都是实现一个返回true的onDown()方法.这是因为所有手势都以onDown()消息开头.如果从onDown()返回false,默认情况下GestureDetector.SimpleOnGestureListener会执行false,系统会假定您要忽略其余的手势,而GestureDetector.OnGestureListener的其他方法永远不会被调用.这可能会在您的应用中导致意外问题.你应该从onDown()返回false的唯一一次是你真的想忽略整个手势.
您未实施该onDown()方法的事实导致了副作用.
| 归档时间: |
|
| 查看次数: |
9184 次 |
| 最近记录: |