-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathFasterStartAnimatorUtils.java
More file actions
67 lines (54 loc) · 2.68 KB
/
FasterStartAnimatorUtils.java
File metadata and controls
67 lines (54 loc) · 2.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.zhucai;
import android.animation.ObjectAnimator;
import android.animation.TimeInterpolator;
import android.animation.ValueAnimator;
import android.util.Property;
public class FasterStartAnimatorUtils {
static public final float TIME_PER_FRAME = 16.7f;
static public float[] processFloatParams(long duration, TimeInterpolator interpolator, float... values) {
if (values == null || values.length == 0) return null;
if (values.length == 1) return processFloatParams(duration, interpolator, 0.f, values[0]);
float f = TIME_PER_FRAME / (duration + TIME_PER_FRAME);
if (interpolator != null) {
f = interpolator.getInterpolation(f);
}
values[0] += (values[1] - values[0]) * f;
return values;
}
static public int[] processIntParams(long duration, TimeInterpolator interpolator, int... values) {
if (values == null || values.length == 0) return null;
if (values.length == 1) return processIntParams(duration, interpolator, 0, values[0]);
float f = TIME_PER_FRAME / (duration + TIME_PER_FRAME);
if (interpolator != null) {
f = interpolator.getInterpolation(f);
}
values[0] += (values[1] - values[0]) * f;
return values;
}
static public ValueAnimator ofFloat(long duration, TimeInterpolator interpolator, float... values) {
ValueAnimator animator = ValueAnimator.ofFloat(processFloatParams(duration, interpolator, values));
animator.setDuration(duration);
animator.setInterpolator(interpolator);
return animator;
}
static public ValueAnimator ofInt(long duration, TimeInterpolator interpolator, int... values) {
ValueAnimator animator = ValueAnimator.ofInt(processIntParams(duration, interpolator, values));
animator.setDuration(duration);
animator.setInterpolator(interpolator);
return animator;
}
public static <T> ObjectAnimator ofFloat(T target, Property<T, Float> property, long duration,
TimeInterpolator interpolator, float... values) {
ObjectAnimator animator = ObjectAnimator.ofFloat(target, property, processFloatParams(duration, interpolator, values));
animator.setDuration(duration);
animator.setInterpolator(interpolator);
return animator;
}
public static <T> ObjectAnimator ofInt(T target, Property<T, Integer> property, long duration,
TimeInterpolator interpolator, int... values) {
ObjectAnimator animator = ObjectAnimator.ofInt(target, property, processIntParams(duration, interpolator, values));
animator.setDuration(duration);
animator.setInterpolator(interpolator);
return animator;
}
}