Android属性

Android属性动画

目录
  1. 属性动画简介
  2. 通过ViewPropertyAnimator设置属性动画
  3. 通过ObjectAnimator设置动画
  4. AnimatorSet组合动画
  5. 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);
}

在这里插入图片描述

项目地址:https://github.com/BrinsLee/Animator

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值