2012-04-10 47 views
1

我的Android應用程序中有一個自定義視圖,它使用ScaleGestureDetector.SimpleOnScaleGestureListener來檢測用戶何時想通過雙指縮放來縮放視圖或出。這很有效,直到我嘗試在Android 2.1設備上進行測試時,它會立即崩潰,因爲它找不到該類。如何在可能的情況下使用API​​級別8級別,否則什麼都不做

我想支持2.2+的縮放縮放,默認爲不縮放zoom < 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; 
    } 
} 

at android < 2.1。有沒有一種聰明的方式來解決這個使用java反射?我知道如何測試一個方法是否存在通過反射,但我可以測試一個類是否存在?我怎麼能有我的

private ScaleGestureDetector mScaleDetector; 

在我的類的頂部聲明如果API甚至不能看到ScaleGestureDetector類?

好像我應該能夠宣佈一些有點像內部接口:

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

然後以某種方式... 嘗試取決於如果反射告訴你的是,類是訪問擴展ScaleGestureDetector ...

但我不確定從那裏去哪裏。任何指導或示例代碼將不勝感激,讓我知道,如果它不清楚我在問什麼。

+0

使用* android.os.Build.VERSION.SDK_INT *常量 – 2012-04-10 03:29:10

回答

2

好吧,你可以得到ScaleGestureDetector的源代碼並放到你的項目中,使它成爲你自己的類,並用它來代替系統ScaleGestureDetector,這樣可以避開android 2.2及以下版本。

這裏是ScaleGestureDetector源代碼:http://pastebin.com/r5V95SKe

+0

這很棒!我如何在未來找到這樣的課程?這是:http://source.android.com/source/downloading.html最好/唯一的方式? – MattF 2012-04-10 05:07:00

+0

你是對的。 – idiottiger 2012-04-10 05:54:52

+0

非常感謝idiottiger。你真的欠我一杯啤酒! – Nitin4Android 2012-06-08 11:45:31

1

Build.VERSION.RELEASE

用上面的線來獲得設備的OS版本。

而且你可以有簡單的情況。只需檢查操作系統版本是否高於2.2,您可以放大縮小。否則不要放大或縮小。

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 
} 
相關問題