Skip to content

Commit 3416179

Browse files
author
daimajia
committed
support pivot reset. fix #74
1 parent 25f832a commit 3416179

File tree

3 files changed

+41
-2
lines changed

3 files changed

+41
-2
lines changed

demo/src/main/java/com/daimajia/androidanimations/MyActivity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public void onItemClick(AdapterView<?> parent, View view, int position, long id)
4343
rope = YoYo.with(technique)
4444
.duration(1200)
4545
.repeat(YoYo.INFINITE)
46+
.pivot(YoYo.CENTER_PIVOT, YoYo.CENTER_PIVOT)
4647
.interpolate(new AccelerateDecelerateInterpolator())
4748
.withListener(new Animator.AnimatorListener() {
4849
@Override

library/src/main/java/com/daimajia/androidanimations/library/BaseViewAnimator.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public abstract class BaseViewAnimator {
3636
public static final long DURATION = 1000;
3737

3838
private AnimatorSet mAnimatorSet;
39+
3940
private long mDuration = DURATION;
4041

4142
{
@@ -74,8 +75,6 @@ public void reset(View target) {
7475
ViewCompat.setRotation(target, 0);
7576
ViewCompat.setRotationY(target, 0);
7677
ViewCompat.setRotationX(target, 0);
77-
ViewCompat.setPivotX(target, target.getMeasuredWidth() / 2.0f);
78-
ViewCompat.setPivotY(target, target.getMeasuredHeight() / 2.0f);
7978
}
8079

8180
/**

library/src/main/java/com/daimajia/androidanimations/library/YoYo.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
package com.daimajia.androidanimations.library;
2727

2828
import android.animation.Animator;
29+
import android.support.v4.view.ViewCompat;
2930
import android.view.View;
3031
import 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

Comments
 (0)