feat:add TimingFunction for iOS

This commit is contained in:
pengfei.zhou
2019-12-02 19:59:11 +08:00
parent 93bb374a94
commit 35fe6c41d5
4 changed files with 118 additions and 8 deletions

View File

@@ -25,10 +25,17 @@ import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.Interpolator;
import android.view.animation.LinearInterpolator;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import androidx.annotation.NonNull;
import androidx.interpolator.view.animation.FastOutSlowInInterpolator;
import androidx.interpolator.view.animation.LinearOutSlowInInterpolator;
import pub.doric.DoricContext;
import pub.doric.DoricRegistry;
@@ -695,6 +702,7 @@ public abstract class ViewNode<T extends View> extends DoricContextHolder {
JSValue repeatMode = value.asObject().getProperty("repeatMode");
JSValue fillMode = value.asObject().getProperty("fillMode");
JSValue timingFunction = value.asObject().getProperty("timingFunction");
for (int j = 0; j < changeables.size(); j++) {
ObjectAnimator animator = parseChangeable(changeables.get(j).asObject(), fillMode);
if (repeatCount.isNumber()) {
@@ -703,6 +711,9 @@ public abstract class ViewNode<T extends View> extends DoricContextHolder {
if (repeatMode.isNumber()) {
animator.setRepeatMode(repeatMode.asNumber().toInt());
}
if (timingFunction.isNumber()) {
animator.setInterpolator(getTimingInterpolator(timingFunction.asNumber().toInt()));
}
animatorSet.play(animator);
}
long duration = value.asObject().getProperty("duration").asNumber().toLong();
@@ -711,13 +722,27 @@ public abstract class ViewNode<T extends View> extends DoricContextHolder {
if (delayJS.isNumber()) {
animatorSet.setStartDelay(delayJS.asNumber().toLong());
}
return animatorSet;
} else {
return null;
}
}
private Interpolator getTimingInterpolator(int timingFunction) {
switch (timingFunction) {
case 1:
return new LinearInterpolator();
case 2:
return new AccelerateInterpolator();
case 3:
return new DecelerateInterpolator();
case 4:
return new FastOutSlowInInterpolator();
default:
return new AccelerateDecelerateInterpolator();
}
}
private ObjectAnimator parseChangeable(JSObject jsObject, JSValue fillMode) {
String key = jsObject.getProperty("key").asString().value();
float startVal = jsObject.getProperty("fromValue").asNumber().toFloat();