ScaleGestureDetector在Android 4.2中未检测到两个手指移动

时间:2013-02-06 20:00:26

标签: android multi-touch

我有一个实现ScaleGestureDetector.OnScaleGestureListener的类。在运行Android 4.1及更早版本的设备上,几乎每两次手指滑动移动就会调用方法(OnScaleBegin, OnScale, and OnScaleEnd)。这对我很有用,因为我使用两个手指滑动来平移和缩放(缩放)功能。我使用currentSpan中的ScaleGestureDetector来确定用户是想要平移还是缩放。从Android 4.2开始,只有当指针之间的跨度变化超过操作系统确定的阈值时才会调用OnScale ...方法。

其他人是否看到了这个?有没有办法操纵操作系统确定的阈值?

其他GestureDetector选项仅响应单指针事件。是否有最佳实践以支持4.2和4.2之前的OS版本的方式检测多指针移动事件?

1 个答案:

答案 0 :(得分:0)

最后,我决定使用ScaleGestureDetector缩放功能和视图onTouchEvent()中的条件来处理平移。我在缩放时设置了一个标志以防止平移。代码摘录包括在下面。它不像我可以同时缩放和平移那样光滑,但它是我可以忍受的解决方案。

----在视图类----

ScaleListener zoomListener = new ScaleListener();

public override bool OnTouchEvent(MotionEvent motion)
{
    zoomListener.onTouchEvent(motion);

    int actionMasked = motion.getActionMasked();
    if (actionMasked == MotionEvent.ACTION_MOVE && motion.getPointersDown() > 1)
    {
        if (!_zoomMode)
        {
            // If more than one pointer is involved in a move event, 
            // and zoom mode is not set, we assume that the user is panning.
            // A zoom gesture movement should be handled by the ScaleGestureDetector
            doPan();
        }
    }
}

----内心阶层----

class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener
{
     public boolean onScale(ScaleGestureDetector detector)
     {
        setZoomMode(true);
        doZoom();
     } 

     public void onScaleEnd(ScaleGestureDetector detector)
     {
         setZoomMode(false);
     }
}