Android动画---ObjectAnimator

随便记录一下属性动画ViewPropertyAnimator,ObjectAnimator

1. 多种动画同时执行

ViewPropertyAnimator实现方式

view.animate() //获取ViewPropertyAnimator
        .scaleX(1) //X轴缩放1
        .scaleY(1) //Y轴缩放1
        .alpha(1); //透明度变为1

ObjectAnimator实现方式

//设置X轴缩放1的holder
PropertyValuesHolder holder1 = PropertyValuesHolder.ofFloat("scaleX", 1);
//设置Y轴缩放1的holder
PropertyValuesHolder holder2 = PropertyValuesHolder.ofFloat("scaleY", 1);
//设置透明度变为1的holder
PropertyValuesHolder holder3 = PropertyValuesHolder.ofFloat("alpha", 1);
//将三个holder传入ofPropertyValuesHolder中
ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(view, holder1, holder2, holder3)
//开启动画
animator.start();
//动画1
ObjectAnimator animator1 = ObjectAnimator.ofFloat(...);
animator1.setInterpolator(new LinearInterpolator());
//动画2
ObjectAnimator animator2 = ObjectAnimator.ofInt(...);
animator2.setInterpolator(new DecelerateInterpolator());
//创建一个动画集
AnimatorSet animatorSet = new AnimatorSet();
//将两个动画1和2同时再一起播放
animatorSet.playTogether(animator1, animator2);
//开启播放动画
animatorSet.start();

2. 多种动画依次执行

ObjectAnimator实现方式

//动画1
ObjectAnimator animator1 = ObjectAnimator.ofFloat(...);
animator1.setInterpolator(new LinearInterpolator());
//动画2
ObjectAnimator animator2 = ObjectAnimator.ofInt(...);
animator2.setInterpolator(new DecelerateInterpolator());
//创建一个动画集
AnimatorSet animatorSet = new AnimatorSet();
// 两个动画依次执行
animatorSet.playSequentially(animator1, animator2);
//开启动画
animatorSet.start();

以及这种方式

//动画1和动画2一起播放
animatorSet.play(animator1).with(animator2);
//动画1在动画2之前播放
animatorSet.play(animator1).before(animator2);
//动画1在动画2之后播放
animatorSet.play(animator1).after(animator2);
animatorSet.start();

3. ObjectAnimator中的PropertyValuesHolders.ofKeyframe()

可以理解为把动画中的帧的属性拆开,如下是让一个进度增加到 100% 后再「反弹」回来

// 在 0% 处开始
Keyframe keyframe1 = Keyframe.ofFloat(0, 0);
// 时间经过 50% 的时候,动画完成度 100%
Keyframe keyframe2 = Keyframe.ofFloat(0.5f, 100);
// 时间见过 100% 的时候,动画完成度倒退到 80%,即反弹 20%
Keyframe keyframe3 = Keyframe.ofFloat(1, 80);
PropertyValuesHolder holder = PropertyValuesHolder.ofKeyframe("progress", keyframe1, keyframe2, keyframe3);

ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(view, holder);
animator.start();

效果如下

![效果](https://img-blog.csdnimg.cn/20200306115536460.gif)

你可能感兴趣的:(android)