版权声明:本文为博主原创文章,遵循 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();