网站首页 > 技术文章 正文
六、RotateAnimation
RotateAnimation提供旋转的动画效果。
它里面的参数含义是:
1)fromDegrees, toDegrees,旋转开始和结束的角度。以x轴为0度,顺时针旋转一定的角度,只有这两个参数的构造函数默认以View的左上角,坐标(0, 0)为旋转点。
2)pivotX,pivotY,以(pivotX, pivotY)为旋转点,pivotX为距离view左边的偏移量,pivot为距离顶部的偏移量。
3)pivotXType, pivotXValue, pivotYType,pivotYValue,同位移等动画一样,type是旋转点偏移的类型,取值有ABSOLUTE, RELATIVE_TO_SELF和RELATIVE_TO_PARENT,value是旋转点偏移的数值。
七、动画的开始和停止
不要在Activity的onCreate里直接开始动画,因为onCreate还没结束时,做动画的View还没有跟Window完成关联,要在界面变得可见时再开始动画,比如可以在onWindowFocusChanged为true开始动画,或者用post一个Runnable,在里面开始启动动画,这样保证了onCreate在主线程中先完成调用。
View的clearAnimation()方法可以清除动画,消除view上的动画效果,让动画立即停止下来。Animation有cancel方法可以取消动画的执行。
实际上是直接调用了AnimationListener的onAnimationEnd方法,未必能立即让动画停下来。如果调用了cancel后,想让动画重新执行前需要先调用Animation的reset方法。
八、插值器Interpolator
Animation的setInterpolator用来为动画设置插值器。常用的插值器有:
1)OvershootInterpolator,开始有个加速过程,超出终点一定数值后,速度慢慢降下来,最后回到终点。
2)AccelerateInterpolator,开始速度比较慢,然后加速到达终点。
3)DecelerateInterpolator,开始速度快,然后减速到达终点。
4)LinearInterpolator,一直保持常量的速度。
5)CycleInterpolator,循环播放特定的次数,速率改变沿着正弦曲线。
此外还可以修改系统插值器的属性来实现自定义的效果:
android:factor:加速速率,默认为1
android:tension:起始点后退的张力、拉力数,默认为2
android:tension:拉力的倍数,默认为1.5
九、Frame动画
帧动画就是按照做好的图像顺序播放,可以把要播放的图像按顺序设置好,作为View的background或source,然后使用AnimationDrawable来表示帧动画,它有setOneShot方法来表示只播放一次还是反复循环播放。比如有一个loading动画,在xml中设置它的每一帧图像,使用animation-list标签,然后作为ImageView的src,最后调用AnimationDrawable的start开始播放帧动画。
如果帧动画每一幅图都比较大,而且有很多张图片时就要考虑用其他方法代替帧动画,因为此时绘制每一幅的开销很多,会影响性能变得卡顿,也很耗内存。
十、AnimationSet
AnimationSet能够把多个动画组合起来,设置它们的播放时机,用addAnimation添加每一个动画,AnimationSet的其他方法有。
setFillAfter:动画完成时View是否停留在动画终止的位置。它的用处是如果有一组动画,先做位移再做淡出动画,在位移动画完成后View不能回到开始的位置,因此要设setFillAfter为true。
setFillBefore:动画完成时View是否停留在动画开始的位置。
setFillEnabled:使能填充效果
setStartOffset:设置动画的启动时间。
setRepeatCount:设置动画重复的次数,比如可用在左右来回晃动的动画。
十一、AnimatorSet
AnimatorSet是属性动画Animator的一组集合,属性动画被应用时对象属性产生变化,最终影响View的外观变化。AnimatorSet的方法主要有:
play:执行一个属性动画
with:两个动画一起执行,比如下面表示anim1和anim2同时执行
AnimatorSet set = new AnimatorSet();
set.play(anim1).with(anim2);
before:动画执行的顺序,比如下面表示先执行anim1,再执行anim2
set.play(anim1).before(anim2)
after:同样,先执行anim2,再执行anim3
set.play(anim3).after(anim2)
十二、各类
Listener
AnimationListener用来监听视图动画变化过程中的状态,有三个方法:onAnimationStart, onAnimationEnd, onAnimationRepeat。
AnimatorListener用来监听属性动画变化过程中的状态,它有四个方法,除了start,end和repeat外,比AnimationListener多了一个onAnimationCancel。
ValueAnimator.AnimatorUpdateListener是属性动画特有的,它的onAnimationUpdate方法在动画的每一帧都会被调用,以使用ValueAnimator计算得到的最新值,根据属性动画的实际情况,可能需要根据新的属性值去调用某个View身上的invalidate方法去强制刷新某一个区域。
关注微信公众号:嵌入式企鹅圈 获得更多原创文章实时推送!本篇文章为嵌入式企鹅圈原创团队成员-阿里工程师分享。
- 上一篇: Android 安全逆向:篡改你的位置信息
- 下一篇: 2020年仍然有效的一些XSS Payload
猜你喜欢
- 2024-10-24 初探animation中steps()属性(animation steps属性)
- 2024-10-24 HTML5(九)——超强的 SVG 动画(htmlsvg动画代码)
- 2024-10-24 自定义日历(二)(自定义日历控件)
- 2024-10-24 Flutter简单动画Animation运用(flutter 视频教程)
- 2024-10-24 css3中动画animation中的steps()函数
- 2024-10-24 移动端渲染原理浅析(移动端渲染原理浅析设计)
- 2024-10-24 iOS 事件处理机制与图像渲染过程(简述ios中的事件响应机制)
- 2024-10-24 Android 开机问题分析(android无法开机)
- 2024-10-24 GoogleCTF + zer0ptsCTF + ImaginaryCTF 2023 笔记
- 2024-10-24 决战“金三银四”,中高级Web前端大厂面试秘籍:CSS篇
- 11-26Win7\8\10下一条cmd命令可查得笔记本电脑连接过的Wifi密码
- 11-26一文搞懂MySQL行锁、表锁、间隙锁详解
- 11-26电脑的wifi密码忘记了?一招教你如何找回密码,简单明了,快收藏
- 11-26代码解决忘记密码问题 教你用CMD命令查看所有连接过的WIFI密码
- 11-26CMD命令提示符能干嘛?这些功能你都知道吗?
- 11-26性能测试之慢sql分析
- 11-26论渗透信息收集的重要性
- 11-26如何查看电脑连接过的所有WiFi密码
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)