【发布时间】:2014-05-03 06:50:17
【问题描述】:
此代码通过ObjectAnimator 和AnimationSets 在按钮单击时切换两个视图(mView1 和mView2)的y-position。在翻译动画时,两个视图的alpha 值将减少并再次增长。这只是一个玩一点的设置。 alpha 动画是用 XML 定义的,翻译动画是用代码完成的。
<?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>
@Override
public void onClick(View v) {
if (mView1 != null && mView2 != null) {
int top = mView2.getTop();
ObjectAnimator translateView1 = null;
ObjectAnimator translateView2 = null;
if (mView1.getTranslationY() == 0) {
translateView1 = ObjectAnimator.ofFloat(mView1, "translationY", top);
translateView2 = ObjectAnimator.ofFloat(mView2, "translationY", top*(-1));
} else {
translateView1 = ObjectAnimator.ofFloat(mView2, "translationY", 0);
translateView2 = ObjectAnimator.ofFloat(mView1, "translationY", 0);
}
translateView1.setDuration(1000L);
translateView2.setDuration(1000L);
AnimatorSet alpha1 = (AnimatorSet)AnimatorInflater.loadAnimator(mCtx, R.anim.switcher);
alpha1.setTarget(mView1);
AnimatorSet alpha2 = (AnimatorSet)AnimatorInflater.loadAnimator(mCtx, R.anim.switcher);
alpha2.setTarget(mView2);
AnimatorSet set = new AnimatorSet();
set.playTogether(translateView1, translateView2, alpha1, alpha2);
set.start();
}
}
现在,由于它按预期工作,我想知道如何缩短代码?
真的有必要为每个使用 XML 动画的
View拥有一个单独的AnimatorSet实例吗?我可以一次膨胀 xml 并在不同的 AnimatorSets / ObjectAnimators 上使用它吗?因为我没有找到将 Animator 作为 Argument 的 setter。我可以为一个 AnimationSet/ObjectAnimator 定义多个目标吗?或者是为 View 定义不同的 ObjectAnimator 并在 AnimationSet 中使用它们的唯一方法?
【问题讨论】:
标签: android xml android-animation android-xml