属性动画的监听器(取消监听器)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/pengbo6665631/article/details/99459544
前言
动画分为好几类,逐帧动画和补间动画就不说了,重点看一下属性动画吧

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监听器方法:
   

ViewPropertyAnimator: 
    设置监听器:setListener()和setUpdateListener()
    取消监听器:setListener(null)和setUpdateListener(null)
 
ObjectAnimator:
    设置监听器:addListener()和addUpdateListener()
    移除监听器:removeListenre()


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


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值