react-native-navigation的迁移库

ViewAnimationSetBuilder.java 1.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package com.reactnativenavigation.anim;
  2. import android.view.View;
  3. import android.view.animation.Animation;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. public class ViewAnimationSetBuilder implements Animation.AnimationListener {
  7. private Runnable onComplete;
  8. private List<View> views = new ArrayList<>();
  9. private List<Animation> pendingAnimations = new ArrayList<>();
  10. private boolean started = false;
  11. public ViewAnimationSetBuilder withEndListener(Runnable onComplete) {
  12. this.onComplete = onComplete;
  13. return this;
  14. }
  15. public ViewAnimationSetBuilder add(View view, Animation animation) {
  16. views.add(view);
  17. pendingAnimations.add(animation);
  18. animation.setAnimationListener(this);
  19. view.setAnimation(animation);
  20. return this;
  21. }
  22. public void start() {
  23. for (Animation animation : pendingAnimations) {
  24. animation.start();
  25. }
  26. started = true;
  27. if (pendingAnimations.isEmpty()) finish();
  28. }
  29. @Override
  30. public void onAnimationStart(final Animation animation) {
  31. // nothing
  32. }
  33. @Override
  34. public void onAnimationEnd(final Animation animation) {
  35. pendingAnimations.remove(animation);
  36. if (started && pendingAnimations.isEmpty()) finish();
  37. }
  38. @Override
  39. public void onAnimationRepeat(final Animation animation) {
  40. // nothing
  41. }
  42. private void finish() {
  43. for (View view : views) {
  44. view.clearAnimation();
  45. }
  46. views.clear();
  47. if (onComplete != null) onComplete.run();
  48. }
  49. }