Android 使用多个手势听者是一种糟糕的做法吗?如何把它们绑在一起?
我需要在我的应用程序上检测机器人夹点和双击事件。因此,我创建了一个Android 使用多个手势听者是一种糟糕的做法吗?如何把它们绑在一起?,android,gesture,Android,Gesture,我需要在我的应用程序上检测机器人夹点和双击事件。因此,我创建了一个scalegestruedetector和一个gestureedetector,并将它们都设置为在我的onTouchEvent上运行。它起作用了。两个事件都已正确触发。然而,这是一种不好的做法吗?我是否应该(可以?)找到一种方法将它们放在同一个手势检测器中 探测器: private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleG
scalegestruedetector
和一个gestureedetector
,并将它们都设置为在我的onTouchEvent
上运行。它起作用了。两个事件都已正确触发。然而,这是一种不好的做法吗?我是否应该(可以?)找到一种方法将它们放在同一个手势检测器中
探测器:
private class ScaleListener extends
ScaleGestureDetector.SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {
mScaleFactor *= detector.getScaleFactor();
Log.d(TAG,"mScaleFactor:" + mScaleFactor);
// Don't let the object get too small or too large.
mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 10.0f));
mScaleFactor = mScaleFactor > maxScaleFactor ? maxScaleFactor :
mScaleFactor < minScaleFactor ? minScaleFactor :
mScaleFactor;
//recalulcate max/min X/Y based on the new scale factor
minX = ((self.getWidth() / mScaleFactor) - backGround.getWidth()) ;
maxX = 0; //((self.getWidth() / mScaleFactor) + backGround.getWidth()) ;;//- (minX + backGround.getWidth());
minY = ((self.getHeight() / mScaleFactor) - backGround.getHeight());
maxY = 0; //((self.getHeight() / mScaleFactor) + backGround.getHeight());
mScalePivotX = detector.getFocusX();
mScalePivotY = detector.getFocusY();
invalidate();
return true;
}
}
private class DoubleTapListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
Log.d(TAG,"TAP TAP");
return false;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
//Check for pinch
mScaleDetector.onTouchEvent(ev);
//check for double tap
doubleTapDetector.onTouchEvent(ev);
final int action = ev.getAction();
switch (action & MotionEvent.ACTION_MASK) {
...
}
}