2

所以我试图在我的应用程序中做一些动画,并且有一种方法可以在不使用ObjectAnimatorand AnimatorListenerfrom的情况下做到这一点API 11。但是,它们不像使用这些类做动画那样流畅和健壮。

因此,我通过检查 API 级别对对象类中的代码进行了更改,因此除非 API 级别为 11+ ObjectAnimatorAnimatorListener否则不会调用这些内容。

问题是我的对象正在实现AnimatorListener,即使它的功能并未在所有版本的代码中使用。我认为这会导致VerifyError我的应用程序启动,因为现在它在 API 级别 10 及以下的设备上崩溃。

有没有办法有条件地实现基于 API 级别的接口或不同的方式来实现相同的事情?

谢谢!

4

4 回答 4

3

您可以尝试使用https://github.com/JakeWharton/NineOldAndroids/将动画 UI 反向移植到 pre-11。

于 2013-05-09T20:11:35.303 回答
3

实际上,如果您针对或使用更高的 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();
...

注意,“SomeImplementation”必须是 OldSchoolAnimator 和 SuperAnimator 类的通用超类型或接口!不要对工厂中的实现类使用“导入”,而是使用完全限定的类名。

于 2013-05-09T20:39:36.697 回答
2

我认为您正在寻找工厂设计模式:

http://en.wikipedia.org/wiki/Factory_method_pattern

于 2013-05-09T20:12:12.287 回答
0

我最终为侦听器使用了一个匿名内部类,并使用了完全限定的类名,而不是导入其他动画对象!

于 2013-05-09T21:10:15.937 回答