[英]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.