是否有用于处理Android中的缩放缩放功能的内置API

时间:2010-04-15 13:28:51

标签: android multi-touch

我只是想知道是否有某种类使用android 2.1的多点触控功能。具体来说,我正在尝试实现双指缩放,并想知道我是否总是要测量两个触摸事件之间的距离并自己计算缩放级别?

谢谢, 克里斯

5 个答案:

答案 0 :(得分:15)

我正在尝试做同样的事情,和往常一样,我的第一直觉就是调查Android源代码本身。有趣的部分似乎是在ScaleGestureDetector类中,这不是公开的,但它的javadoc说

  

@hide Pending API批准

所以希望它会在某个时候公开。

更新ScaleGestureDetector现已成为Android 2.2 API的一部分。

答案 1 :(得分:4)

我相信您需要自己计算缩放级别。这篇文章看起来是一个很好的资源,可以帮助您入门:http://blogs.zdnet.com/Burnette/?p=1847

答案 2 :(得分:3)

这取决于您希望定位的Android版本。

  • 2.2或更新 - 使用内置的ScaleGestureDetector。 javadoc非常有用,但请参阅下面的示例。
  • 2.0-2.2 - ScaleGestureDetector不是内置的,所以copy the version from Android并将其编译到您的应用程序中。
  • Pre-2.0 - 2.0之前不支持Mutitouch,所以你需要copy ScaleGestureDetector.java from Android并做更多工作,不在不支持的设备上使用任何多点触控API:

为了避免在2.0之前的设备上使用多点触控API,您需要为ScaleGestureDetector创建一个接口(Eclipse可以通过Refactor菜单执行此操作),以及1.x设备将使用的虚拟实现。我们将调用我们的接口ScaleGestureDetectorInterface和我们的虚拟实现FakeScaleGestureDetector

以下是支持pre-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;
    }
}

答案 3 :(得分:1)

开发人员创建了一些黑客攻击,可以在浏览器和Dolphin浏览器上启用多点触控。这些都是自定义的roms,我相信它们是可下载的。

此外,谷歌已经在Nexus One和摩托罗拉的官方发布里面正式发布了多点触控。这意味着你应该可以获得官方课程,但我敢打赌它适用于Android版本2.1。

此外,我认为可以安全地假设您希望这可以在root电话上运行。并不意味着你可能会被困在使用Android 2.1并且可能一直到2.0。

答案 4 :(得分:0)

你想放大图片吗?作为一个简单的解决方案,您可以使用WebView显示图像,它具有内置的缩放功能。