有人知道如何在ViewPropertyAnimator中制作重复的动画吗?
我尝试过所有方法,但都不起作用,ViewPropertyAnimator不接受其他类型动画的方法
发布于 2014-09-07 09:33:35
在调用start()之前包装ViewPropertyAnimator可以做到这一点。下面我写了一个包装类,它将在动画结束时重复动画。您可以修改该类以满足您的需要。
package main.java.app.com.animation;
import android.animation.Animator;
import android.support.v4.view.ViewPropertyAnimatorListener;
import android.view.ViewPropertyAnimator;
/**
* Created by nikola on 9/7/14.
*/
public class RepeatableViewPropertyAnimatorWrapper implements Animator.AnimatorListener {
private static RepeatableViewPropertyAnimatorWrapper mInstance;
private ViewPropertyAnimator mViewPropertyAnimator;
private Animator.AnimatorListener mViewPropertyAnimatorListener;
private boolean willRepeat = true;
private Animator mCurrentAnimator;
public static RepeatableViewPropertyAnimatorWrapper wrap(ViewPropertyAnimator animator){
mInstance = new RepeatableViewPropertyAnimatorWrapper(animator);
return mInstance;
}
public static RepeatableViewPropertyAnimatorWrapper withAnimatorListener(Animator.AnimatorListener animatorListener){
mInstance.setAnimatorListener(animatorListener);
return mInstance;
}
private void setAnimatorListener(Animator.AnimatorListener animatorListener) {
mViewPropertyAnimatorListener = animatorListener;
}
public RepeatableViewPropertyAnimatorWrapper(ViewPropertyAnimator animator){
mViewPropertyAnimator = animator;
}
public RepeatableViewPropertyAnimatorWrapper(ViewPropertyAnimator animator, Animator.AnimatorListener animatorListener){
mViewPropertyAnimator = animator;
mViewPropertyAnimatorListener = animatorListener;
}
public boolean isRepeating() {
return willRepeat;
}
public void setRepeat(boolean willRepeat) {
this.willRepeat = willRepeat;
}
private void setup(){
mViewPropertyAnimator.setListener(this);
}
@Override
public void onAnimationStart(Animator animation) {
mCurrentAnimator = animation;
if(mViewPropertyAnimatorListener != null){
mViewPropertyAnimatorListener.onAnimationStart(animation);
}
}
@Override
public void onAnimationEnd(Animator animation) {
if(mViewPropertyAnimatorListener != null){
mViewPropertyAnimatorListener.onAnimationEnd(animation);
}
repeatAnimation();
}
public void start(){
mViewPropertyAnimator.start();
}
private void repeatAnimation() {
if(willRepeat){
start();
onAnimationRepeat(mCurrentAnimator);
}
mInstance = null;
}
@Override
public void onAnimationCancel(Animator animation) {
if(mViewPropertyAnimatorListener != null){
mViewPropertyAnimatorListener.onAnimationCancel(animation);
}
}
@Override
public void onAnimationRepeat(Animator animation) {
if(mViewPropertyAnimatorListener != null){
mViewPropertyAnimatorListener.onAnimationRepeat(animation);
}
}用法:
RepeatableViewPropertyAnimatorWrapper.wrap(view.animate().alpha(0).setDuration(500)).withAnimatorListener(myListener).start();请注意,我没有测试这段代码,请记住,根据ViewPropertyAnimator实现的不同,设置值可能会发生变化。
https://stackoverflow.com/questions/25706252
复制相似问题