Skip to content

Commit

Permalink
support pivot reset. fix #74
Browse files Browse the repository at this point in the history
  • Loading branch information
daimajia committed Feb 21, 2017
1 parent 25f832a commit 3416179
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ public void onItemClick(AdapterView<?> parent, View view, int position, long id)
rope = YoYo.with(technique)
.duration(1200)
.repeat(YoYo.INFINITE)
.pivot(YoYo.CENTER_PIVOT, YoYo.CENTER_PIVOT)
.interpolate(new AccelerateDecelerateInterpolator())
.withListener(new Animator.AnimatorListener() {
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ public abstract class BaseViewAnimator {
public static final long DURATION = 1000;

private AnimatorSet mAnimatorSet;

private long mDuration = DURATION;

{
Expand Down Expand Up @@ -74,8 +75,6 @@ public void reset(View target) {
ViewCompat.setRotation(target, 0);
ViewCompat.setRotationY(target, 0);
ViewCompat.setRotationX(target, 0);
ViewCompat.setPivotX(target, target.getMeasuredWidth() / 2.0f);
ViewCompat.setPivotY(target, target.getMeasuredHeight() / 2.0f);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
package com.daimajia.androidanimations.library;

import android.animation.Animator;
import android.support.v4.view.ViewCompat;
import android.view.View;
import android.view.animation.Interpolator;

Expand All @@ -38,13 +39,15 @@ public class YoYo {
private static final long DURATION = BaseViewAnimator.DURATION;
private static final long NO_DELAY = 0;
public static final int INFINITE = -1;
public static final float CENTER_PIVOT = Float.MAX_VALUE;

private BaseViewAnimator animator;
private long duration;
private long delay;
private boolean repeat;
private long repeatTimes;
private Interpolator interpolator;
private float pivotX, pivotY;
private List<Animator.AnimatorListener> callbacks;
private View target;

Expand All @@ -55,6 +58,8 @@ private YoYo(AnimationComposer animationComposer) {
repeat = animationComposer.repeat;
repeatTimes = animationComposer.repeatTimes;
interpolator = animationComposer.interpolator;
pivotX = animationComposer.pivotX;
pivotY = animationComposer.pivotY;
callbacks = animationComposer.callbacks;
target = animationComposer.target;
}
Expand Down Expand Up @@ -96,9 +101,11 @@ public static final class AnimationComposer {

private BaseViewAnimator animator;
private long duration = DURATION;

private long delay = NO_DELAY;
private boolean repeat = false;
private long repeatTimes = 0;
private float pivotX = YoYo.CENTER_PIVOT, pivotY = YoYo.CENTER_PIVOT;
private Interpolator interpolator;
private View target;

Expand All @@ -125,6 +132,22 @@ public AnimationComposer interpolate(Interpolator interpolator) {
return this;
}

public AnimationComposer pivot(float pivotX, float pivotY) {
this.pivotX = pivotX;
this.pivotY = pivotY;
return this;
}

public AnimationComposer pivotX(float pivotX) {
this.pivotX = pivotX;
return this;
}

public AnimationComposer pivotY(float pivotY) {
this.pivotY = pivotY;
return this;
}


public AnimationComposer repeat(int times) {
if (times < INFINITE) {
Expand Down Expand Up @@ -209,6 +232,10 @@ public boolean isRunning() {
return animator.isRunning();
}

public void stop() {
stop(true);
}

public void stop(boolean reset) {
animator.cancel();

Expand All @@ -221,6 +248,18 @@ public void stop(boolean reset) {

private BaseViewAnimator play() {
animator.setTarget(target);

if (pivotX == YoYo.CENTER_PIVOT) {
ViewCompat.setPivotX(target, target.getMeasuredWidth() / 2.0f);
} else {
target.setPivotX(pivotX);
}
if (pivotY == YoYo.CENTER_PIVOT) {
ViewCompat.setPivotY(target, target.getMeasuredHeight() / 2.0f);
} else {
target.setPivotY(pivotY);
}

animator.setDuration(duration)
.setInterpolator(interpolator)
.setStartDelay(delay);
Expand Down

0 comments on commit 3416179

Please sign in to comment.