GestureDetector と拡張された SimpleOnGestureListener を備えた GLSurfaceView があります。サーフェス ビューで複数のアイテムをすばやくタップして選択できるようにする必要があります。onSingleTapConfirmed は遅すぎるため、タッチをすばやく検出するために onSingleTapUp をオーバーライドしました。ここでの問題は、サーフェス ビュー上の 2 つのアイテムが互いに近くにあり、ユーザーが一方をタップしてからもう一方をすばやくタップすると、最初のアイテムに対して onSingleTapUp メソッドが呼び出されますが、2 番目のアイテムに対しては呼び出されないことです。2 つ目は、オーバーライドされているかどうかに関係なく、onDoubleTap メソッドを呼び出します。
これを解決するために、単純に onDoubleTap メソッドをオーバーライドしないようにしました。また、オーバーライドされた onDoubleTap で何もせず、false を返そうとしました。どちらも問題を解決しません。2 回目のタップでは、onSingleTapUp メソッドはまだ呼び出されません。
onDoubleTap メソッドで 2 回目のタップを検出して、そこから項目を選択することにしました。問題は、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;
}
}
ありがとう、マット