Применить одну анимацию к нескольким представлениям одновременно

Так что Id хотел бы повернуть несколько видов одновременно, все с использованием тех же спецификаций вращения. Проблема в том, что по какой-то причине вращение действует по-разному для второго элемента. По-видимому, это связано с тем, что объект анимации фактически меняет состояние между этими двумя строками кода. Очевидно, я мог бы просто создать отдельный объект анимации и применить его, но я чувствую, что есть более простой способ (у меня есть около 15 видов)

вращает только первый вид правильно:

Animation rotateAnim = AnimationUtils.loadAnimation(this, R.anim.rotationtoportrait);
target.startAnimation(rotateAnim);
lightBtn.startAnimation(rotateAnim);

вращается, как правильно

Animation rotateAnim = AnimationUtils.loadAnimation(this, R.anim.rotationtoportrait);
Animation rotateAnim2 = AnimationUtils.loadAnimation(this, R.anim.rotationtoportrait);
target.startAnimation(rotateAnim);
lightBtn.startAnimation(rotateAnim2);

XML:

<?xml version="1.0" encoding="utf-8"?>
<rotate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="-90"
    android:toDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="500" android:fillAfter="true">

У кого-нибудь есть идеи?

2 ответов


делай так:

ObjectAnimator anim = ObjectAnimator.ofFloat(view, "y", 100f);
arrayListObjectAnimators.add(anim);

ObjectAnimator anim1 = ObjectAnimator.ofFloat(view, "x", 0f);
arrayListObjectAnimators.add(anim1);

ObjectAnimator[] objectAnimators = arrayListObjectAnimators.toArray(new ObjectAnimator[arrayListObjectAnimators.size()]);
AnimatorSet animSetXY = new AnimatorSet();
animSetXY.playTogether(objectAnimators);
animSetXY.duration(1000);
animSetXY.start();

поэтому я думаю, что это просто невозможно, поэтому я создал вспомогательный метод, чтобы просто применить ту же анимацию к списку представлений:

public void doRotations(ArrayList<View> views, int start, int end, int xprop, float xscale, int yprop, float yscale, int duration, Boolean fillAfter){

    for(int i = 0; i < views.size(); i++){
        RotateAnimation temp = new RotateAnimation(start, end, xprop, xscale, yprop, yscale);
        temp.setDuration(duration);
        temp.setFillAfter(fillAfter);
        views.get(i).startAnimation(temp);
    }
}

определенно хак, но я думаю, что это все, что я могу сделать прямо сейчас