Этот код переключает y-position
двух представлений (mView1 и mView2) при нажатии кнопки с помощью ObjectAnimator
и AnimationSet
s. Во время анимации перевода значение 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();
}
}
Теперь, поскольку это работает, как и ожидалось, я хочу знать, как я могу сократить код?
Действительно ли необходимо иметь отдельный экземпляр
AnimatorSet
для каждогоView
, который использует анимацию из XML? Могу ли я раздуть xml один раз и использовать его в разных AnimatorSets/ObjectAnimators? Потому что я не нашел сеттера, который принимает Animator в качестве аргумента.Могу ли я определить несколько целей для одного AnimationSet/ObjectAnimator? Или это единственный способ определить разные ObjectAnimators для представлений и использовать их в AnimationSet?