属性动画提供了监听器用于监听动画的播放过程。主要有如下两个接口:
AnimatorUpdateListener和AnimatorListener。
AnimatorListener可以监听动画的开始、结束、取消和重复播放。
AnimatorUpdateListener会监听整个动画过程,即每走一帧,就会监听一帧。
对任意属性做动画
属性动画要求动画作用的对象提供该属性的get和set方法,属性动画根据外界传递的该属性的初始值和最终值,以动画的效果多次去执行set方法。每次传给set方法的值都不一样,随着时间推移,这个值将越来越接近最终值。所以我们对object的属性abc做动画,如果想让动画生效,要同时满足两个条件:
(1)object必须要提供setAbc方法,如果动画没有提供初始值,还要提供getAbc方法。
(2)object的setAbc对属性abc所做的改变必须能够通过某种方法反映出来,比如会带来UI的改变之类的(否则动画无效果但不会crash)。
比如我们给以一个button来加一个变宽的动画,button的getWidth能够得到width,但是setWidth却不能改变width,因为在button继承的TextView中的setWidth是设置最小宽度和最大宽度,所以满足了第一个条件没有满足第二个条件。解决方法有:
(1)如果你有权限就给你的属性加上set和get方法。
(2)用一个类来包装原始对象,间接为其提供get和set方法。
(3)采用ValueAnimator,监听动画过程,自己实现属性改变。
属性动画的工作原理
这里就不贴源码了,其实很简单,就是判断先将当前动画、等待动画、延迟动画中有和当前动画相同的动画,则将其取消,最后将当前动画start。
使用动画的注意事项
- OOM
帧动画中出现了大量的尺寸过大的图片
- 内存泄漏
有些动画会无限循环,所以要在Activity退出时及时停止。
-
兼容性问题
-
View动画问题
View动画是对动画做影像动画,并没真正改变View的状态
-
不要使用px
-
动画元素的交互
属性动画的单击事件触发在移动后的位置,View则在之前的位置。
- 硬件加速
使用动画的过程中尽量使用硬件加速,能保证动画的平滑和流畅性。
理解Window和WindowManager
Window是一个窗口,Window的具体实现位于WindowManagerService中,WindowManager可以管理Window,并以IPC的形式与WindowManagerService交互。
首先使用WindowManager来添加一个Window,代码如下:
上述的代码将一个Button添加屏幕的(100,300)坐标上。
WindowManager.LayoutParams中的flags和type这两个参数比较重要。
下面是几个重要的flags:
Type参数表示的是Window的类型,有三种,分别是应用Window,子Window和系统Window。
应用类Window对应着一个Activity,子Window不能单独存在,它需要附属在父Window中,比如常见的Dialog就是子Window。系统Window就是需要声明权限才能创建的Window,比如Toast。
它们都有分层,大的级别在上面,Window的范围是1-99,子Window是1000-1999,系统则是2000-2999,可以通过LayoutParams的的type设置。
WindowManager的功能比较简单,就是添加View、更新View、删除View。这三个方法都定义在接口ViewManager中。而WindowManager继承了ViewManager。
Window的内部机制
每一个Window都对应着一个View和一个ViewRootImpl,Window和View通过ViewRootImpl来建立联系,因此View实际上是不存在的,它是以View的形式存在。实际中无法直接应用Window,要通过WindowManager。
- Window的添加
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**