2013-05-09 48 views
2

所以我想在我的應用程序做一些動畫,並有一種方法來做到這一點,而不使用ObjectAnimatorAnimatorListenerAPI 11。但是,它們並不像使用這些類的動畫那樣平滑和健壯。有條件地實現一個接口

所以我在對象的類中對代碼進行了更改,並檢查了API級別,因此除非API級別爲11+,否則將不會調用ObjectAnimatorAnimatorListener

的問題是,我的對象是實現AnimatorListener即使沒有在代碼的所有版本中使用其功能。我認爲這導致我的應用程序啓動時出現VerifyError,因爲現在它在具有API級別10和更低級別的設備上崩潰。

有有條件地實現基於API級別或不同的方式來實現同樣的事情的接口的方法嗎?

謝謝!

回答

3

實際上,這是OK,如果你築起或更高的SDK的目標,問題是,只有當你的代碼是真正運行在缺少來自更高SDK的課程的設備上。正如其他人的建議,你可以去工廠

public class Factory { 
    public static <T> T getImplementation(){ 
    if(<SDK_LEVEL_INCOMPATIBLE>){ 
     return (T)new <package>.OldSchoolAnimator(); 
    }else{ 
     return (T)new <package>.SuperAnimator(); 
    } 
    } 
} 


... 
SomeImplementation impl = new Factory().getImplementation(); 
... 

WATCHOUT,「SomeImplementation」必須OldSchoolAnimator和SuperAnimator類的通用超類或接口!不要在工廠中使用「導入」實現類,而是使用完全限定的類名。

0

我最終使用了偵聽器的匿名內部類,並使用完全限定的類名來代替導入其他動畫對象!