Android属性动画
目录
- 属性动画简介
- 通过ViewPropertyAnimator设置属性动画
- 通过ObjectAnimator设置动画
- AnimatorSet组合动画
- ObjectAnimator自定义动画
1、属性动画简介
安卓3.0开始引入属性动画,不同于之前只能改变显示,无法操作对象属性的补间动画,属性动画可以实现更加丰富的动画效果,并且能够操作对象属性。(例如,使用对一个button使用补间动画实现平移,平移后点击该button并不会触发单击事件,因为补间动画只能改变button的显示位置,并不改变对象属性。)
2、通过ViewPropertyAnimator设置属性动画
设置属性动画的一种方式就是使用ViewPropertyAnimator,用法比较简单:
如要实现view水平移动200,view.animate().translationX(200)。
常用的设置动画的方法:
|
View中的方法 | 功能 | 对应ViewPropertyAnimator中的方法 |
---|---|---|
setTranslationX() | x轴偏移 | translationX() 、translationXBy() |
setTranslationY() | y轴偏移 | translationY() 、translationYBy() |
setTranslationZ() | z轴偏移 | translationZ() 、translationZBy() |
setX() | x轴绝对位置 | x() 、xBy() |
setY() | y轴绝对位置 | y() 、yBy() |
setZ() | z轴偏移 | z() 、zBy() |
setRotation() | 平面旋转 | rotation() 、rotationBy() |
setRotationX() | x轴旋转 | rotationX() 、rotationXBy() |
setRotationY() | y轴旋转 | rotationY() 、rotationYBy() |
setScaleX() | 横向缩放 | scaleX() 、scaleXBy() |
setScaleY() | 纵向缩放 | scaleY() 、scaleYBy() |
setAlpha() | 设置透明度 | alpha() 、alphaBy() |
此外,还可以通过调用setInterpolator()设置插值器。常用插值器有:
- AccelerateDecelerateInterpolator 先加速再减速。这是默认的 Interpolator
- LinearInterpolator 匀速。
- AccelerateInterpolator 持续加速。
- DecelerateInterpolator 持续减速直到 0。
- AnticipateInterpolator 先回拉一下再进行正常动画轨迹。
- OvershootInterpolator 动画会超过目标值一些,然后再弹回来。
- AnticipateOvershootInterpolator上面这两个的结合版:开始前回拉,最后超过一些然后回弹。
- BounceInterpolator 在目标值处弹跳。
3、通过ObjectAnimator设置动画
使用ObjectAnimator.ofXXX()创建ObjectAnimator对象
objectAnimator= ObjectAnimator.ofFloat(iv,"translationX",500f)
.setDuration(1500);
objectAnimator.setInterpolator(Linearinterpolator);//使用线性插值器,动画速度为匀速
objectAnimator.start();
4、AnimatorSet组合动画
通过AnimatorSet对象将多个ObjectAnimator组合起来
objectAnimator= ObjectAnimator.ofFloat(imageView,"translationX",500f);
objectAnimator.setInterpolator(AccDecinterpolator);
objectAnimator1=ObjectAnimator.ofFloat(imageView,"rotation",360f);
objectAnimator1.setInterpolator(AccDecinterpolator);
AnimatorSet animatorSet=new AnimatorSet();
animatorSet.play(objectAnimator).with(objectAnimator1);
animatorSet.setDuration(1500);
animatorSet.start();
AnimatorSet对象中提供了play(),向方法中传入Animator对象(ValueAnimator/ObjectAnimator),将返回AnimatorSet.Builder实例。AnimatorSet.Builder中提供了以下4个方法用于控制动画播放顺序:
- after(Animator anima): 将现有动画插入到传入play()方法中的动画之后执行。
- after(long delay): 将现有动画延迟指定毫秒后执行。
- with(Aanimator anima): 与传入动画同时执行。
- before(Animator anima): 在传入动画前执行。
ObjectAnimator自定义动画
自定义属性,需要添加set和get方法,不然无法生效
public class Myview extends View{
float progress=0;
public float getProgress() {
return progress;
}
public void setProgress(float progress) {
this.progress = progress;
invalidate(); //通知刷新属性
}
...
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint=new Paint();
paint.setColor(getResources().getColor(R.color.colorAccent));
paint.setStyle(Paint.Style.FILL);
RectF arc=new RectF(200,200,1000,1000);
canvas.drawArc(arc,135,progress,true,paint);
}