2626package com .daimajia .androidanimations .library ;
2727
2828import android .animation .Animator ;
29+ import android .support .v4 .view .ViewCompat ;
2930import android .view .View ;
3031import android .view .animation .Interpolator ;
3132
@@ -38,13 +39,15 @@ public class YoYo {
3839 private static final long DURATION = BaseViewAnimator .DURATION ;
3940 private static final long NO_DELAY = 0 ;
4041 public static final int INFINITE = -1 ;
42+ public static final float CENTER_PIVOT = Float .MAX_VALUE ;
4143
4244 private BaseViewAnimator animator ;
4345 private long duration ;
4446 private long delay ;
4547 private boolean repeat ;
4648 private long repeatTimes ;
4749 private Interpolator interpolator ;
50+ private float pivotX , pivotY ;
4851 private List <Animator .AnimatorListener > callbacks ;
4952 private View target ;
5053
@@ -55,6 +58,8 @@ private YoYo(AnimationComposer animationComposer) {
5558 repeat = animationComposer .repeat ;
5659 repeatTimes = animationComposer .repeatTimes ;
5760 interpolator = animationComposer .interpolator ;
61+ pivotX = animationComposer .pivotX ;
62+ pivotY = animationComposer .pivotY ;
5863 callbacks = animationComposer .callbacks ;
5964 target = animationComposer .target ;
6065 }
@@ -96,9 +101,11 @@ public static final class AnimationComposer {
96101
97102 private BaseViewAnimator animator ;
98103 private long duration = DURATION ;
104+
99105 private long delay = NO_DELAY ;
100106 private boolean repeat = false ;
101107 private long repeatTimes = 0 ;
108+ private float pivotX = YoYo .CENTER_PIVOT , pivotY = YoYo .CENTER_PIVOT ;
102109 private Interpolator interpolator ;
103110 private View target ;
104111
@@ -125,6 +132,22 @@ public AnimationComposer interpolate(Interpolator interpolator) {
125132 return this ;
126133 }
127134
135+ public AnimationComposer pivot (float pivotX , float pivotY ) {
136+ this .pivotX = pivotX ;
137+ this .pivotY = pivotY ;
138+ return this ;
139+ }
140+
141+ public AnimationComposer pivotX (float pivotX ) {
142+ this .pivotX = pivotX ;
143+ return this ;
144+ }
145+
146+ public AnimationComposer pivotY (float pivotY ) {
147+ this .pivotY = pivotY ;
148+ return this ;
149+ }
150+
128151
129152 public AnimationComposer repeat (int times ) {
130153 if (times < INFINITE ) {
@@ -209,6 +232,10 @@ public boolean isRunning() {
209232 return animator .isRunning ();
210233 }
211234
235+ public void stop () {
236+ stop (true );
237+ }
238+
212239 public void stop (boolean reset ) {
213240 animator .cancel ();
214241
@@ -221,6 +248,18 @@ public void stop(boolean reset) {
221248
222249 private BaseViewAnimator play () {
223250 animator .setTarget (target );
251+
252+ if (pivotX == YoYo .CENTER_PIVOT ) {
253+ ViewCompat .setPivotX (target , target .getMeasuredWidth () / 2.0f );
254+ } else {
255+ target .setPivotX (pivotX );
256+ }
257+ if (pivotY == YoYo .CENTER_PIVOT ) {
258+ ViewCompat .setPivotY (target , target .getMeasuredHeight () / 2.0f );
259+ } else {
260+ target .setPivotY (pivotY );
261+ }
262+
224263 animator .setDuration (duration )
225264 .setInterpolator (interpolator )
226265 .setStartDelay (delay );
0 commit comments