Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用多个手势听者是一种糟糕的做法吗?如何把它们绑在一起?_Android_Gesture - Fatal编程技术网

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) {
            ...
            }
     }