Применить одну анимацию к нескольким представлениям одновременно
Так что 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);
}
}
определенно хак, но я думаю, что это все, что я могу сделать прямо сейчас