我的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,具体取决于反射是否告诉您该类是否可访问...
但我不确定从哪里去。任何指导或示例代码将不胜感激,如果不清楚我在问什么,请告诉我。
答案 0 :(得分:2)
好吧,您可以获取ScaleGestureDetector
源代码并放入您的项目,将其作为您自己的类,并使用它代替系统ScaleGestureDetector
,这可以避免Android 2.2及以下版本
这是ScaleGestureDetector
源代码:http://pastebin.com/r5V95SKe
答案 1 :(得分:2)
创建两个A类和B类.A2表示2.2+,B表示2.1或更早版本。
if(Build.VERSION.SDK_INT < 8) //2.2 version is 8
{
Use the class B
}
else
{
Use class A
}
答案 2 :(得分:1)
Build.VERSION.RELEASE
使用上面的行获取设备的操作系统版本。
你可以有简单的if else案例。只需检查操作系统版本是否高于2.2即可放大缩小。否则不要放大或缩小。