Android(安卓)属性动画看这篇就够了
16lz
2021-01-25
前言
- 动画绘制与 View 绘制有哪些区别?
- Android 动画框架是什么?适应场景有哪些?
动画机制
Android 内部有一套动画框架,开发者通过调用 Api 能够快速实现华丽丽的动画效果。
动画和 View 有着密切联系,其中动画的重绘在 ViewGroup.drawChild 中实现,听说刷新间隔10ms。
视图动画
View(视图)动画的作用对象是 View,有四种效果:平移动画,缩放动画,透明度动画,旋转动画。
名称 | 标签 | 子类 | 效果 |
---|---|---|---|
平移动画 | TranslateAnimation | 移动 View | |
缩放动画 | ScaleAnimation | 放大或缩小 View | |
透明度动画 | AlphaAnimation | 改变 View 的透明度 | |
旋转动画 | RotateAnimation | 旋转 View |
Interpolater
插值器:影响动画的播放速度,比如非匀速动画需要插值器来控制播放流程。
属性动画
API 11 以后新加入了属性动画,使用属性动画移动的 View 是真正移动到了相应的位置,也就是说具有可交互性。
属性动画从 API 11 才有,但是 J神推出了兼容版本 Nineoldandroids 对Android3.0 以前的版本进行兼容,目前这些版本早已经退出市场,所以兼容性已经不是问题。
流程图
图片来自 https://blog.csdn.net/carson_ho/article/details/72909894
ValueAnimator 的示例代码,将宽度为 100dp 的 button,改为 500dp,设置动画时间 3s。
// 步骤1:设置动画的初始值和结束值 ValueAnimator valueAnimator = ValueAnimator.ofInt(button.getLayoutParams().width,500); // 步骤2:设置播放时间 valueAnimator.setDuration(3000); // 步骤3:绑定监听器 valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animator) { int currentValue = (Integer) animator.getAnimatedValue(); // 获得每次变化后的属性值 System.out.println(currentValue); // 输出每次变化后的属性值进行查看 button.getLayoutParams().width = currentValue; // 每次值变化时,将值手动赋值给对象的属性 // 即将每次变化后的值 赋 给按钮的宽度,这样就实现了按钮宽度属性的动态变化 // 步骤4:刷新视图,即重新绘制,从而实现动画效果 button.requestLayout(); } }); // 启动动画 valueAnimator.start();
插值器和估值器
之前的 Button 的变化动画中,并未使用插值器和估值算法,因为它是匀速动画,这两个工具是实现非匀速动画的重要手段。
插值器 | 作用 | 估值算法 | 作用 |
---|---|---|---|
线性插值器 | 匀速动画 | IntEvaluator | 针对整型属性 |
加速减速插值器 | 两头慢中间快 | FloatEvaluator | 针对浮点型 |
减速插值器 | 动画越来越慢 | ArgbEvaluator | 针对 Color 属性 |
更多相关文章
- Android(安卓)抽象布局include merge Viewstub
- Android仿“知乎”隐藏标题栏、回答详情页动画效果
- Android(安卓)点击 APP 图标几秒才显示界面
- Android(安卓)小项目之--数据存储【Files】(附源码)
- 【Android】界面布局之 LinearLayout(线性布局)
- Android中ImageView的scaleType 属性说明。
- Android事件拦截处理机制理解:
- Android逆向破解之Mointor查看目标日志
- Android(安卓)ScrollView嵌套WebView出现大面积空白页解决方法