繁体   English   中英

如何在可能的情况下使用 API 8 级 class,否则什么也不做

[英]How to use an API level 8 class when possible, and do nothing otherwise

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

我想在 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 反射来解决这个问题? 我知道如何通过反射测试方法是否存在,但我可以测试 class 是否存在吗? 我怎样才能拥有我的

private ScaleGestureDetector mScaleDetector;

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

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

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

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

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

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

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

创建两个类 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
}

构建.版本.发布

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

你可以有简单的 if else 案例。 只要检查操作系统版本是否高于 2.2,你就可以放大缩小。 否则使其不放大或缩小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM