react-native-navigation的迁移库

ElementTransitionManager.java 1.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package com.reactnativenavigation.views.element;
  2. import android.animation.Animator;
  3. import androidx.annotation.RestrictTo;
  4. import com.reactnativenavigation.parse.Transition;
  5. import com.reactnativenavigation.parse.Transitions;
  6. import java.util.Collection;
  7. import java.util.Collections;
  8. import java.util.List;
  9. import java.util.Map;
  10. import static com.reactnativenavigation.utils.CollectionUtils.filter;
  11. import static com.reactnativenavigation.utils.CollectionUtils.keyBy;
  12. public class ElementTransitionManager {
  13. private final TransitionValidator validator;
  14. private final TransitionAnimatorCreator animatorCreator;
  15. @RestrictTo(RestrictTo.Scope.TESTS)
  16. ElementTransitionManager(TransitionValidator validator, TransitionAnimatorCreator animatorCreator) {
  17. this.validator = validator;
  18. this.animatorCreator = animatorCreator;
  19. }
  20. public ElementTransitionManager() {
  21. validator = new TransitionValidator();
  22. animatorCreator = new TransitionAnimatorCreator();
  23. }
  24. public Collection<Animator> createTransitions(Transitions transitions, List<Element> fromElements, List<Element> toElements) {
  25. if (!transitions.hasValue() || fromElements.isEmpty() || toElements.isEmpty()) return Collections.EMPTY_LIST;
  26. Map<String, Element> from = keyBy(fromElements, Element::getElementId);
  27. Map<String, Element> to = keyBy(toElements, Element::getElementId);
  28. List<Transition> validTransitions = filter(transitions.get(), (t) -> validator.validate(t, from, to));
  29. return animatorCreator.create(validTransitions, from, to);
  30. }
  31. }