我想知道是否有一种类可以使用Android 2.1的多点触控功能。特别是我正在尝试实现捏合缩放,想知道是否必须始终测量两个触摸事件之间的距离并自己计算缩放级别?
谢谢, 克里斯
我想知道是否有一种类可以使用Android 2.1的多点触控功能。特别是我正在尝试实现捏合缩放,想知道是否必须始终测量两个触摸事件之间的距离并自己计算缩放级别?
谢谢, 克里斯
我正试图做同样的事情,通常我的第一反应是查看Android源代码。有趣的部分似乎在类ScaleGestureDetector中,该类不是公共的,但其javadoc说:
@hide Pending API approval
因此希望它最终会变为公共的。
更新:ScaleGestureDetector现在是Android 2.2 API的一部分。
我相信你需要自己计算缩放级别。这篇文章似乎是一个很好的资源,可以帮助你入门:http://blogs.zdnet.com/Burnette/?p=1847
这取决于您想要针对哪个版本的Android进行开发。
为了避免在2.0之前的设备上使用多点触控API,您需要为ScaleGestureDetector创建一个接口(Eclipse可以通过Refactor菜单完成此操作),以及1.x设备将使用的虚拟实现。我们将称我们的接口为ScaleGestureDetectorInterface
,虚拟实现为FakeScaleGestureDetector
。
以下是支持2.0之前设备的示例:
// If you don't care about pre-2.0 devices, just make this a
// ScaleGestureDetector and skip the API check in the constructor.
private final ScaleGestureDetectorInterface mScaleDetector;
public MyView {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ECLAIR) {
// Use the fake version which won't call any multitouch APIs
mScaleDetector = new FakeScaleGestureDetector();
} else {
// We are using SDK 2.0+, use the real implementation.
mScaleDetector = new ScaleGestureDetector(context,
new MyScaleListener());
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// On pre-2.0, the implementation does nothing.
return mScaleDetector.onTouchEvent(event);
}
private class MyScaleListener extends
ScaleGestureDetector.SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureInterface detector) {
float scaleFactor = detector.getScaleFactor();
// If you were using a matrix to zoom an ImageView, you would do
// something like this:
mMatrix.postScale(scaleFactor, scaleFactor, detector.getFocusX(),
detector.getFocusY());
return true;
}
}
开发人员已经创建了一些黑客程序,可以在浏览器和海豚浏览器上启用多点触控。这些程序包含在自定义ROM中,我相信它们是可下载的。
此外,Google已经在Nexus One上正式发布了多点触控功能,Motorola也在他们的Milestone上发布了该功能。这意味着您应该能够获得官方的类库,但我敢打赌它只适用于Android 2.1版本。
另外,我认为可以安全地假设您希望此功能在已Root的手机上运行。这意味着您可能会被困在使用Android 2.1甚至2.0的版本上。