Android 如何使动画的代码更有效?
此代码通过Android 如何使动画的代码更有效?,android,xml,android-animation,android-xml,Android,Xml,Android Animation,Android Xml,此代码通过ObjectAnimator和AnimationSets在按钮单击时切换两个视图(mView1和mView2)的y位置。平移动画时,两个视图的alpha值将减小并再次增长。这只是一个设置,以发挥周围的一点。alpha动画是用XML定义的,而translate动画是用代码完成的 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/and
ObjectAnimator
和AnimationSet
s在按钮单击时切换两个视图(mView1和mView2)的y位置。平移动画时,两个视图的alpha
值将减小并再次增长。这只是一个设置,以发挥周围的一点。alpha动画是用XML定义的,而translate动画是用代码完成的
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="sequentially">
<objectAnimator
android:propertyName="alpha"
android:duration="500"
android:valueTo="0.5"
android:valueType="floatType"/>
<objectAnimator
android:propertyName="alpha"
android:duration="500"
android:valueTo="1.0"
android:valueType="floatType"/>
</set>
现在,因为这是预期的工作,我想知道如何缩短代码
- 对于每个使用XML动画的
视图
,是否真的需要有一个单独的动画集
实例?我可以将xml膨胀一次并在不同的AnimatorSet/ObjectAnimators上使用它吗?因为我没有找到一个以动画师为参数的setter
- 我可以为一个AnimationSet/ObjectAnimator定义多个目标吗?还是为视图定义不同的ObjectAnimator并在AnimationSet中使用它们的唯一方法
您将希望将动画代码放入已设置动画的类中。。。像这样:
public class FadingView extends View {
private ObjectAnimator fade, moveX, moveY;
private AnimatorSet moveSet;
public FadingView(Context context) {
super(context);
}
private void fade(int duration, float...values) {
if(fade==null) {
fade = ObjectAnimator.ofFloat(this, "alpha", values);
} else {
fade.setFloatValues(values);
}
fade.setDuration(duration);
fade.start();
}
private void move(int duration, int x, int y) {
if(moveX==null) {
moveX = ObjectAnimator.ofFloat(this, "translation_x", x);
} else {
moveX.setFloatValues(x);
}
if(moveY==null) {
moveY = ObjectAnimator.ofFloat(this, "translation_y", y);
} else {
moveY.setFloatValues(y);
}
if(moveSet == null) {
moveSet = new AnimatorSet();
moveSet.playTogether(moveX, moveY);
}
moveSet.setDuration(duration);
moveSet.start();
}
public void moveToUpperLeft(int duration) {
move(duration, 0,0);
}
public void show(int duration) {
fade(duration,1);
}
public void hide(int duration) {
fade(duration,0);
}
}
这只是一个基本示例,但现在您可以调用:
FadingView view = new FadingView(context);
view.hide(500);
view.moveToUpperLeft(500);
当然,你可以定制和推广这甚至更多
FadingView view = new FadingView(context);
view.hide(500);
view.moveToUpperLeft(500);