有条件地实现一个接口

时间:2013-05-09 20:09:19

标签: java android

所以我正在尝试在我的应用中制作一些动画,并且可以在不使用ObjectAnimator的{​​{1}}和AnimatorListener的情况下执行此操作。但是,它们不像使用这些类进行动画那样平滑和健壮。

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

问题是我的对象正在实现AnimatorListener,即使它的功能没有在所有版本的代码中使用。我认为这会导致AnimatorListener启动我的应用,因为现在它在API等级为10且已关闭的设备上崩溃。

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

谢谢!

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

实际上,如果您针对更高版本的SDK目标构建或者使用更高版本的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类的常见超类型或界面!不要在工厂中使用“imports”作为实现类,而应使用完全限定的类名。

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

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