public class AnimatorDemo {
//属性动画,通过调用Get Set方法来真实的控制了一个View的属性值
//如果该属性没有get set方法,则可以通过包装类来解决 ->mTargetView.getLayoutParams().width=width;
//也可以通过ValueAnimtor的来解决这个问题
private static AnimatorDemo instance;
public static AnimatorDemo getInstance(){
if (instance==null){
synchronized (AnimatorDemo.class){
if (instance==null)
instance=new AnimatorDemo();
}
}
return instance;
}
//ObjectAnimator继承于ValueAnimator
//更像是一个数值发生器,用来产生有规律的数字
public void doValueAnimator(final ImageView iv){
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 100, 0, 300);
valueAnimator.setDuration(5000);
valueAnimator.setTarget(iv);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
Float animatedValue = (Float) animation.getAnimatedValue();
iv.setTranslationX(animatedValue);
}
});
valueAnimator.start();
}
public void doAlpha(ImageView iv){
}
public void doRotate(ImageView iv){
}
public void doTranslate(ImageView iv){
ObjectAnimator translationX = ObjectAnimator.ofFloat(iv, "translationX", 0, 300);
translationX.setDuration(5000);
translationX.start();
}
public void doScale(ImageView iv){
ObjectAnimator translationX = ObjectAnimator.ofFloat(iv, "scaleX", 0, 3);
translationX.setDuration(5000);
translationX.start();
}
//属性动画集合
public void doGroup(ImageView iv){
//实现方法一:使用PropertyValuesHolder
/* PropertyValuesHolder translationX =PropertyValuesHolder.ofFloat("translationX", 0, 300);
PropertyValuesHolder scaleX =PropertyValuesHolder.ofFloat("scaleX", 0, 3);
ObjectAnimator.ofPropertyValuesHolder(iv,translationX,scaleX).setDuration(5000).start();*/
//实现方法二:使用AnimatorSet
ObjectAnimator translationX2 = ObjectAnimator.ofFloat(iv, "translationX", 0, 300);
ObjectAnimator scaleX2 = ObjectAnimator.ofFloat(iv, "scaleX", 0, 3);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setDuration(5000);
animatorSet.playTogether(translationX2,scaleX2);
animatorSet.start();
}
}
animtorDemo
最新推荐文章于 2020-11-17 18:04:58 发布