【问题标题】:Android onScale onTouchEventAndroid onScale onTouchEvent
【发布时间】:2017-09-26 19:38:03
【问题描述】:

在我的应用程序中,用户可以通过在屏幕上移动手指以及在缩放屏幕时执行其他操作来执行某些操作。 我的应用监听缩放事件和触摸事件。

我的问题是当用户缩放时,两根手指从不同时触摸屏幕,所以触摸屏幕的第一根手指调用触摸事件而不是 Scale(当第二根手指来时它调用 onScale 但函数错误之前被调用过)。

当用户松开手指时,我在缩放后遇到同样的问题。

有人知道该怎么做吗? 谢谢

【问题讨论】:

    标签: android zooming touch-event


    【解决方案1】:

    在这种情况下,触摸事件的级别太低,正如您已经体验过的那样。使用为您处理它的ScaleGestureDetector。取自official doc 的一个简单示例可能类似于

    public MyCustomView(Context mContext){
        ...
        // View code goes here
        ...
        scaleDetector = new ScaleGestureDetector(context, new ScaleListener());
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        // Let the ScaleGestureDetector inspect all events.
        if(!scaleDetector.onTouchEvent(ev)) {
           // detect the move event here
        }
        return true;
    }
    

    相同的检测器模式应该用于其他更复杂的事件,例如拖动。

    【讨论】:

    • 我使用 scalegesturedetector 来检测缩放,但在我的 onTouchEvent 函数中我也必须检测运动。当检测到变焦时,它也会检测到移动。这是我的问题。
    • 当我移动手指时我必须翻译我的视图,当我捏时我必须缩放。我的问题是当捏合完成时,系统将最后一个手指位置保持为移动事件
    • @Nos scaleDetector.onTouchEvent() 返回一个布尔值,指示事件是否已处理。这就是您可以相互排除两种检测的方式。
    猜你喜欢
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    相关资源
    最近更新 更多