在视图上添加多个手势,不起作用

问题描述

我正在尝试向视图添加多个手势。我已经成功地让它们分开工作,但是当我合并时,最终只有一个工作,我做错了什么?

我添加的第一个手势是 Scale Gesture

public class MyScaleGestures implements View.OnTouchListener,ScaleGestureDetector.OnScaleGestureListener {
        private View view;
        private ScaleGestureDetector gestureScale;
        private float scaleFactor = 1;
        private boolean inScale = false;

        public MyScaleGestures (Context c){ gestureScale = new ScaleGestureDetector(c,this); }

        @Override
        public boolean onTouch(View view,MotionEvent event) {
            this.view = view;
            gestureScale.onTouchEvent(event);
            return true;
        }

        @Override
        public boolean onScale(ScaleGestureDetector detector) {
            scaleFactor *= detector.getScaleFactor();
            Log.d(TAG,"onScale: " + scaleFactor);
            view.setScaleX(scaleFactor);
            view.setScaleY(scaleFactor);
            return true;
        }

        @Override
        public boolean onScaleBegin(ScaleGestureDetector detector) {
            return true;
        }

        @Override
        public void onScaleEnd(ScaleGestureDetector detector) { inScale = false; }
    }

我的第二个手势是SimpleOnGestureListener

 private class FlingGestureDetector extends GestureDetector.SimpleOnGestureListener {
            @Override
            public boolean onScroll(MotionEvent e1,MotionEvent e2,float distanceX,float distanceY) {
                

                return true;
            }

            @Override
            public boolean onFling(MotionEvent e1,float velocityX,float velocityY) {
                

                return true;
            }
        }

将两者合二为一:

public class OnSwipeTouchListener implements View.OnTouchListener,ScaleGestureDetector.OnScaleGestureListener {

        private final GestureDetector gestureDetector;
        private ScaleGestureDetector gestureScale;

        private OnSwipeTouchListener(Context context) {
            gestureDetector = new GestureDetector(context,new FlingGestureDetector());
            gestureScale = new ScaleGestureDetector(context,this);
        }

        public boolean onTouch(View v,MotionEvent event) {
            gestureDetector.onTouchEvent(event);
            gestureScale.onTouchEvent(event);
            return true;
        }

        @Override
        public boolean onScale(ScaleGestureDetector detector) {
            Log.d(TAG,"onScale: " + detector.getScaleFactor());
            return false;
        }

并使用它:

sceneView.setOnTouchListener(new OnSwipeTouchListener(this));

将它们组合起来后,只有第一个手势最终起作用 (gestureDetector)。我怎样才能让两者都收听视图?

组合它们时,在 onScale 中执行 pinch 操作时永远不会调用 gestureScale 方法。但是当我不包含其他手势时,它会单独工作。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)