自定义View-属性动画Property Animation上手篇

本文深入解析了Android中的属性动画,包括ViewPropertyAnimator和ObjectAnimator的使用方法,以及Interpolator的效果介绍。通过实例展示了平移、旋转、缩放和透明度变化等动画效果的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

动画分为好几类,逐帧动画和补间动画就不说了,重点看一下属性动画吧

ViewPropertyAnimator

// 使用方法
view.animate().tranlationX(500);

// View中的比如setTranslationX()这些方法并没有动画
// 而view.animate()会返回一个ViewPropertyAnimator对象, 可以执行一些基本的动画

ObjectAnimator

// 1如果是自定义控件,需要添加setter/getter方法
// 2用ObjectAnimator.ofXXX()创建ObjectAnimator对象
// 3用start()方法执行动画


// 创建 ObjectAnimator 对象
ObjectAnimator animator = ObjectAnimator.ofFloat(view, "progress", 0, 65);  
// 执行动画
animator.start();  

// 它会有一些通用的功能, 比如:

    // 设置动画时长
    setDuration(int duration)
    // 设置插值器
    setInterpolator(Interpolator interpolator)

Interpolator

// 简单介绍一下Interpolator

AccelerateDecelerate  先加速后减速

Linear 匀速

Accelerate 持续加速

Decelerate 持续减速

Anticipate 回拉

Overshoot 动画结尾回弹

AnticipateOvershoot 以上两种的结合,先回拉,再回弹

Bounce 结尾处弹跳

Cycle 可以自定义区县的周期

Path 自定义动画完成度/时间完成度曲线

FastOutLinearIn 持续加速, 使用的是贝塞尔曲线,前期加速度更快一些

FastOutSlowIn 先加速后减速,使用的是贝塞尔曲线, 前期加速度快一些

LinearOutSlowIn 持续减速,前期加速度快一些

设置监听器

ViewPropertyAnimator: 
    设置监听器:setListener()和setUpdateListener()
    取消监听器:setListener(null)和setUpdateListener(null)

ObjectAnimator:
    设置监听器:addListener()和addUpdateListener()
    移除监听器:removeListenre()
    

Listener监听器方法:
    onAnimationStart(Animator animation)
    
    onAnimationEnd(Animator animation)

    onAnimationCancel(Animator animation)
    
    onAnimationRepeat(Animator animation)

UpdateListener监听器方法:
    onAnimationUpdate(ValueAnimator animation)


其他监听:
    ObjectAnimator.addPauseListener()

    ViewPropertyAnimator.withStartAction/EndAction()

总结

1、帧动画和补间动画就不说了,ViewPropertyAnimator也能直接实现简单的那四种动画,平移,旋转,缩放,透明度

2、属性动画的使用其实也不难,注意那几点

3、那系统自带的10多种Interpolator,大体了解一下,如果需要自定义可是可以的

贴个HenCoder的链接:自定义View-属性动画(上手篇)

分割线---------------------------------------------------------------------------------

实践

// 1 xyz平移
    view.animate().translationX(100);
    view.animate().translationY(100);
    view.animate().translationZ(100);



// 2 xy旋转
    view.animate().rotation(100); // 平面选中,感觉像是沿Z轴旋转
    view.animate().rotationX(100);
    view.animate().rotationY(100);



// 3 xy缩放
    view.animate().scaleX(1.5f);
    view.animate().scaleY(1.5f);



// 4 透明度变化
    view.animate().alpha(1);



// 5 缩放平移旋转透明度结合
    view.animate()
        .translationX(200)
        .scaleX(1)
        .scaleY(1)
        .alpha(1)
        .rotation(360);



// 6 设置动画时长
    view.animate().setDuration(3000);



// 7 Interpolator
    view.setInterpolator(interpolator);



// 8 ObjectAnimator的应用, 进度圈从0到65的显示
    // view当中添加对应属性的setter和getter方法,并记得在setter中调用invalidate()重绘
     ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(view, "progress",0, 65);
     objectAnimator.start();
    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值