我有一个带有GestureDetector和扩展的SimpleOnGestureListener的GLSurfaceVIEw.我需要能够通过快速点击在表面视图上选择多个项目.由于onSingleTapConfirmed太慢,因此我覆盖了onSingleTapUp以快速检测到触摸.现在的问题是,如果表面视图上的两个项目彼此靠近,并且用户快速点击一个项目,然后又快速点击另一个项目,则第一个项目将调用onSingleTapUp方法,而第二个项目则不会被调用.第二个方法调用onDoubleTap方法,无论该方法是否被覆盖.
为了解决这个问题,我尝试不简单地重写onDoubleTap方法,并且还尝试在重写的onDoubleTap中不执行任何 *** 作并返回false.都不能解决问题.在第二次点击时仍不会调用onSingleTapUp方法.
我决定尝试在onDoubleTap方法中检测第二次点击,然后从中选择项目.这样做的问题是从onDoubleTap返回的运动事件包含“双击的第一次轻击的运动事件”. –http://developer.android.com/reference/android/view/GestureDetector.OnDoubleTapListener.html
有什么方法可以禁用双击,更改双击时间以使其永远不会触发,将双击半径更改为很小的值或在onDoubleTap方法中获得第一个点击位置?
这是我的SimpleOnGestureListener:
public class VIEwGestureListener extends GestureDetector.SimpleOnGestureListener { private VIEWrenderer renderer; private GLSurfaceVIEw surfaceVIEw; public VIEwGestureListener(GLSurfaceVIEw surfaceVIEw, VIEWrenderer renderer) { this.renderer = renderer; this.surfaceVIEw = surfaceVIEw; } // Pan @OverrIDe public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { renderer.pan(distanceX, distanceY); surfaceVIEw.requestRender(); return true; } // Double touch and release @OverrIDe public boolean onDoubleTap(MotionEvent e) { // Note: e.getX() doesn't return the second tap's location! renderer.singletouch(e.getX(), e.getY()); surfaceVIEw.requestRender(); return true; } @OverrIDe public boolean onSingleTapUp(MotionEvent e) { renderer.singletouch(e.getX(), e.getY()); surfaceVIEw.requestRender(); return true; }}
谢谢,
马特
解决方法:
我可能来不及帮助这篇文章的作者,但我也遇到了同样的问题,因此这是其他对此感到疑惑的人的答案.
回答:
您需要覆盖以下方法,它将为您提供第二次点击的向下,移动和向上事件:
onDoubleTapEvent(MotionEvent e)
如果要第二次点击向上运动,则:
onDoubleTapEvent(MotionEvent e) { if(e.getAction() != MotionEvent.ACTION_UP) { return false; // Don't do anything for other actions } // YOUR CODE HERE return true;}
祝好运!
/卡洛斯
以上是内存溢出为你收集整理的android-禁用双击或检测第二个点击位置全部内容,希望文章能够帮你解决android-禁用双击或检测第二个点击位置所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)