У меня есть начало класса, совместимого с SDK 15, который можно использовать для создания сложных цепочек анимации, надеюсь, он кому-нибудь поможет.Вы должны быть в состоянии следовать шаблону проектирования, чтобы добавить свои собственные методы.Пожалуйста, прокомментируйте их здесь, и я обновлю ответ, Ура!
package com.stuartclark45.magicmatt.util;
import java.util.LinkedList;
import java.util.List;
import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.view.View;
/**
* Used to build complex animations for a view. Example usage bellow makes view move out to the
* right whilst rotating 45 degrees, then move out to the left.
*
* {@code
* int rotateDuration = 200;
* int rotation = 45;
* new AnimationBuilder(view)
* .translationX(100, rotateDuration)
* .rotateTo(rotation, rotateDuration)
* .then()
* .translationX(-200, rotateDuration)
* .start();
* }
*
* @author Stuart Clark
*/
public class AnimationBuilder {
private View view;
private List<Animator> setsList;
private List<Animator> buildingList;
public AnimationBuilder(View view) {
this.view = view;
this.setsList = new LinkedList<>();
this.buildingList = new LinkedList<>();
}
public AnimationBuilder rotateTo(float deg, long duration) {
buildingList.add(ObjectAnimator.ofFloat(view, "rotation", deg).setDuration(duration));
return this;
}
public AnimationBuilder translationX(int deltaX, long duration) {
buildingList.add(ObjectAnimator.ofFloat(view, "translationX", deltaX).setDuration(duration));
return this;
}
public AnimationBuilder translationY(int deltaX, long duration) {
buildingList.add(ObjectAnimator.ofFloat(view, "translationY", deltaX).setDuration(duration));
return this;
}
public AnimationBuilder then() {
createAniSet();
// Reset the building list
buildingList = new LinkedList<>();
return this;
}
public void start() {
createAniSet();
AnimatorSet metaSet = new AnimatorSet();
metaSet.playSequentially(setsList);
metaSet.start();
}
private void createAniSet() {
AnimatorSet aniSet = new AnimatorSet();
aniSet.playTogether(buildingList);
setsList.add(aniSet);
}
}