我有一个实现ScaleGestureDetector.OnScaleGestureListener
的类。在运行Android 4.1及更早版本的设备上,几乎每两次手指滑动移动就会调用方法(OnScaleBegin, OnScale, and OnScaleEnd)
。这对我很有用,因为我使用两个手指滑动来平移和缩放(缩放)功能。我使用currentSpan
中的ScaleGestureDetector
来确定用户是想要平移还是缩放。从Android 4.2开始,只有当指针之间的跨度变化超过操作系统确定的阈值时才会调用OnScale
...方法。
其他人是否看到了这个?有没有办法操纵操作系统确定的阈值?
其他GestureDetector
选项仅响应单指针事件。是否有最佳实践以支持4.2和4.2之前的OS版本的方式检测多指针移动事件?
答案 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);
}
}