Android 开发艺术探索笔记(16)

本文详细介绍了Android属性动画的监听器、工作原理,以及使用时需注意的OOM、内存泄漏等问题,还重点讲解了Window和WindowManager在添加动画中的角色,包括Window的类型和内部机制。同时,作者分享了Android开发的学习资源,旨在帮助工程师提升技能。
摘要由CSDN通过智能技术生成

属性动画提供了监听器用于监听动画的播放过程。主要有如下两个接口:

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移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

  • 29
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值