1

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

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

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

4

1 回答 1

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);
     }
}
于 2013-02-07T15:55:09.917 回答