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();

【Android动画---ObjectAnimator】以及这种方式
//动画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)

    推荐阅读