react-native-navigation的迁移库

ValueAnimationOptions.java 2.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package com.reactnativenavigation.parse;
  2. import android.animation.Animator;
  3. import android.animation.ObjectAnimator;
  4. import android.util.Property;
  5. import android.view.View;
  6. import com.reactnativenavigation.parse.params.FloatParam;
  7. import com.reactnativenavigation.parse.params.Interpolation;
  8. import com.reactnativenavigation.parse.params.NullFloatParam;
  9. import com.reactnativenavigation.parse.params.NullNumber;
  10. import com.reactnativenavigation.parse.params.Number;
  11. import com.reactnativenavigation.parse.parsers.FloatParser;
  12. import com.reactnativenavigation.parse.parsers.InterpolationParser;
  13. import com.reactnativenavigation.parse.parsers.NumberParser;
  14. import org.json.JSONObject;
  15. public class ValueAnimationOptions {
  16. public static ValueAnimationOptions parse(JSONObject json, Property<View, Float> property) {
  17. ValueAnimationOptions options = new ValueAnimationOptions();
  18. options.animProp = property;
  19. options.from = FloatParser.parse(json, "from");
  20. options.to = FloatParser.parse(json, "to");
  21. options.duration = NumberParser.parse(json, "duration");
  22. options.startDelay = NumberParser.parse(json, "startDelay");
  23. options.interpolation = InterpolationParser.parse(json, "interpolation");
  24. return options;
  25. }
  26. private Property<View, Float> animProp;
  27. private FloatParam from = new NullFloatParam();
  28. private FloatParam fromDelta = new FloatParam(0f);
  29. private FloatParam to = new NullFloatParam();
  30. private FloatParam toDelta = new FloatParam(0f);
  31. private Number duration = new NullNumber();
  32. private Number startDelay = new NullNumber();
  33. private Interpolation interpolation = Interpolation.NO_VALUE;
  34. void setFromDelta(float fromDelta) {
  35. this.fromDelta = new FloatParam(fromDelta);
  36. }
  37. void setToDelta(float toDelta) {
  38. this.toDelta = new FloatParam(toDelta);
  39. }
  40. Animator getAnimation(View view) {
  41. if (!from.hasValue() || !to.hasValue()) throw new IllegalArgumentException("Params 'from' and 'to' are mandatory");
  42. ObjectAnimator animator = ObjectAnimator.ofFloat(view,
  43. animProp,
  44. from.get() + fromDelta.get(),
  45. to.get() + toDelta.get()
  46. );
  47. animator.setInterpolator(interpolation.getInterpolator());
  48. if (duration.hasValue()) animator.setDuration(duration.get());
  49. if (startDelay.hasValue()) animator.setStartDelay(startDelay.get());
  50. return animator;
  51. }
  52. @Override
  53. public boolean equals(Object o) {
  54. if (this == o) return true;
  55. if (o == null || getClass() != o.getClass()) return false;
  56. return animProp.equals(((ValueAnimationOptions) o).animProp);
  57. }
  58. public boolean equals(Property<View, Float> animationProperty) {
  59. return animProp.getName().equals(animationProperty.getName());
  60. }
  61. @Override
  62. public int hashCode() {
  63. return animProp.hashCode();
  64. }
  65. }