Одновременно применять одну анимацию к нескольким представлениям
Итак, Id нравится вращать несколько представлений одновременно, используя все те же характеристики вращения. Проблема в том, что по какой-то причине вращение действует по-разному для второго элемента. По-видимому, это связано с тем, что объект анимации фактически меняет состояние между этими двумя строками кода. Очевидно, я мог бы создать отдельный объект Animation и применить его, но я чувствую, что есть более простой способ (у меня около 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">
У кого-нибудь есть идеи?
Ответы
Ответ 1
Итак, я думаю, это просто невозможно, поэтому я создал вспомогательный метод, чтобы просто применить одну и ту же анимацию к списку представлений:
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);
}
}
Определенно взломать, но я думаю, что все, что я могу сделать прямо сейчас
Ответ 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();