1

我在我的 Android 应用程序中有一个自定义视图,它使用 ScaleGestureDetector.SimpleOnScaleGestureListener 来检测用户何时想要通过两根手指捏合或捏合来缩放视图。这很好用,直到我尝试在 Android 2.1 设备上进行测试,它立即崩溃,因为它找不到类。

我想在 2.2+ 上支持双指缩放,默认为无双指缩放 <2.1。问题是我不能声明我的:

private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener
{
    @Override
    public boolean onScale(ScaleGestureDetector detector)
    {
        MyGameActivity.mScaleFactor *= detector.getScaleFactor();

        // Don't let the object get too small or too large.
        MyGameActivity.mScaleFactor = Math.max(0.1f, Math.min(MyGameActivity.mScaleFactor, 1.0f));

        invalidate();
        return true; 
    }
}

完全在android <2.1上。有没有一种巧妙的方法可以使用 java 反射来解决这个问题?我知道如何通过反射测试方法是否存在,但是我可以测试一个类是否存在吗?我怎样才能拥有我的

private ScaleGestureDetector mScaleDetector;

如果 API 甚至看不到 ScaleGestureDetector 类,在我的类的顶部声明?

似乎我应该能够声明某种内部接口,例如:

public interface CustomScaleDetector
{
    public void onScale(Object o);
}

然后以某种方式...尝试扩展 ScaleGestureDetector 取决于反射是否告诉您该类是可访问的...

但我不确定从那里去哪里。任何指导或示例代码将不胜感激,如果不清楚我在问什么,请告诉我。

4

3 回答 3

2

好吧,你可以获取ScaleGestureDetector源代码并放入你的项目中,将其作为你自己的类,并使用它来代替 system ScaleGestureDetector,这样可以避免 android 2.2 及以下版本。

这是ScaleGestureDetector源代码: http: //pastebin.com/r5V95SKe

于 2012-04-10T03:05:39.643 回答
2

创建两个类 A 和 B。A 用于 2.2+,B 用于 2.1 或更早版本。

if(Build.VERSION.SDK_INT < 8) //2.2 version is 8
{
  Use the class B
}
else
{
 Use class A
}
于 2012-04-10T03:58:25.003 回答
1

Build.VERSION.RELEASE

使用上面的行来获取设备的操作系统版本。

如果其他情况,您可以有简单的情况。只需检查操作系统版本是否高于 2.2 即可放大缩小。否则使其不放大或缩小。

于 2012-04-10T03:41:02.860 回答