Android的View动画笔记
来源:互联网 发布:林书豪篮网场均数据 编辑:程序博客网 时间:2024/06/11 10:53
View动画分为4类
平移 旋转 缩放 透明度
View动画都是继承自android.view.animation.Animation(属性动画是在Animator包下),四类View动画对应4个Java类,TranslateAnimation RotateAnimation ScaleAnimation AphlaAnimation。
View动画的原理,可以通过看源码分析了解,入口可以从View的startAnimation方法进入,可以发现最终会调用Animaton类的 protected void applyTransformation(float interpolatedTime,
Transformation t)
方法说明:
第一个参数为动画的进度时间值,取值范围为[0.0f,1.0f],注意, interpolatedTime是已经通过时间插值器处理后的,
第二个参数Transformation记录着动画某一帧中变形的原始数据。该方法在动画的每一帧显示过程中都会被调用。
这点可以从Animation类中的public boolean getTransformation(long currentTime, Transformation outTransformation)
方法内可看到,方法中如下关键代码:
if (duration != 0) { normalizedTime = ((float) (currentTime - (mStartTime + startOffset))) / (float) duration; } else { // time is a step-change with a zero duration normalizedTime = currentTime < mStartTime ? 0.0f : 1.0f; }
先按线性计算时间的消耗比例,即normalizedTime,此值是线形的,然后通过时间插值器换算成非线性的值,代码片段如下:
final float interpolatedTime = mInterpolator.getInterpolation(normalizedTime); applyTransformation(interpolatedTime, outTransformation);
Animation类中的applyTransformation方法是空实现,各个派生类,例如上面说到的4类动画会去重载实现该方法,来实现动画值的变化。
以AphlaAnimation类的applyTransformation方法为例:
protected void applyTransformation(float interpolatedTime, Transformation t) { final float alpha = mFromAlpha; t.setAlpha(alpha + ((mToAlpha - alpha) * interpolatedTime)); }
可见applyTransformation()方法就是动画具体的实现,系统会以一个比较高的频率来调用这个方法,一般情况下60FPS,是一个非常流畅的画面了,也就是16ms,所以,我们可以重载这个方法,来实现我们自己的动画。
- Android的View动画笔记
- Android View和动画--笔记
- Android的View动画
- Android的View动画
- Android View的动画机制
- Android动画-View动画的使用场景
- Pro Android学习笔记(一零八):2D动画(3):view动画的小例子
- Android动画-View动画
- 学习笔记:View动画
- android影藏View动画的注意事项
- Android View动画的特殊使用场景
- Android View动画的特殊使用场景
- Android中View的动画效果
- Android的View动画使用总结
- Android 自定义View的Path动画
- Android自定义View的动画实现方法
- Android 有点击动画效果的View
- Pro Android学习笔记(一零九):2D动画(4):view的Matrix
- http和ftp下载的区别
- 序列化Serializable和Parcelable的区别
- js判断页面第一次加载,第一次加载
- 端口分类调研
- Android shape画虚线,不显示或者显示实线的解决方案
- Android的View动画笔记
- jquery应用中操作radio、checkbox、select选中的方法
- Java通过浏览器请求头(User-Agent)获取 浏览器类型,操作系统类型,手机机型
- Appium之实战演练
- Android业务组件化开发实践(一)
- Java开发中的23种设计模式详解----装饰模式(Decorator)
- Spring 在多线程中,bean的注入问题
- 初级掌握Junit单元测试
- iOS XCode修改项目名称(同时适用XCode8)