所以我正在尝试在我的应用中制作一些动画,并且可以在不使用ObjectAnimator
的{{1}}和AnimatorListener
的情况下执行此操作。但是,它们不像使用这些类进行动画那样平滑和健壮。
所以我通过检查API级别对我的对象类中的代码进行了更改,因此除非API级别为11+,否则不会调用API 11
和ObjectAnimator
内容。
问题是我的对象正在实现AnimatorListener
,即使它的功能没有在所有版本的代码中使用。我认为这会导致AnimatorListener
启动我的应用,因为现在它在API等级为10且已关闭的设备上崩溃。
有没有办法有条件地实现基于API级别的接口或以不同的方式实现相同的东西?
谢谢!
答案 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)
我认为您正在寻找工厂设计模式:
答案 3 :(得分:0)
我最终为侦听器使用了一个匿名内部类,并使用了完全限定的类名而不是导入其他动画对象!