《Android开发进阶:从小工到专家》——个人读书笔记
[TOC]
第二章:创造出丰富多彩的 UI——View 与动画
2.1 重要的 View 控件
- Activity 中关联了一个 PhoneWindow,在这个窗口下则管理了一颗视图树。这颗视图树的顶级视图则是一个 ViewGroup 类型的 DecorView。
2.1.1 ListView 与 GridView
ListView 列表数据的显示需要4个元素
1、用来展示列表的 ListView
2、用来把数据映射到 ListView 上的 Adapter
3、需要展示的数据集
4、数据展示的 View 模板需要实现的 Adapter 函数:
1、getCount()——获取数据的个数
2、getItem(int)——获取 position 位置的数据
3、getItemId(int)——获取 position 位置的数据 id,一般直接返回 position 即可
4、getView(int, View, ViewGroup)——获取 position 位置上的 ItemView 视图当 ListView 加载时会根据数据的个数来创建 ItemView。但并不是有多少个数据项就会加载多少 ItemView,Android 采用了视图复用的形式来避免创建过多的 ItemView。这样可以非常有效的提升性能和降低内存占用率。
ListView就是通过Adapter模式、观察者模式以及ItemView的复用机制从而实现了列表的高效显示
与 ListView 相似,GridView同样继承自 AbsListView。使得二者有很好的兼容性,同一个 Adapter 既可以设置给 ListView 也可以设置给 GridView,而不需要修改
2.1.2 数据展示更好的实现——RecyclerView
用以替代 ListView 和 GridView
特点:
1、不需要用户判断是否使用 ItemView 缓存,用户只需完成具体的 ViewHolder 构造函数以及数据绑定即可
2、将布局方式抽象为 LayoutManager,默认提供了个 LinearLayoutManager(线性布局)、GridLayoutManager(网格布局)以及** StaggeredGridLayoutManager(交错网格布局)** 这三种布局。也可以定制布局管理器以实现特定的布局方式RecyclerView 通过桥接的方式将布局职责抽离出去,使得 RecyclerView 变得更灵活。
RecyclerView 对于 ItemView 的控制也更加精细。通过 ItemDecotation 为 ItemView 添加装饰。通过 ItemAnimator 为 Item View 添加动画
扫描二维码关注公众号,回复: 5952019 查看本文章
2.1.3 让页面显示更流畅——ViewPager
2.2 必须掌握的最重要的技能——自定义控件
自定义 View 的分类:
1、继承自 View 完全自定义
2、继承自现有控件实现特定效果
3、继承自 ViewGroup 实现布局类本章重点:
1、View 的测量与布局
2、View 的绘制
3、处理触摸事件
4、动画等
2.2.1 最为自由的一种实现——自定义 View
最为自由的一种实现也是相对来说比较复杂的一种(因为需要正确的测量 View 尺寸,并且需要手动绘制各种视觉效果,所以工作量会比较大)
自定义View的实现过程总结:
1、继承自View创建自定义控件;
2、如有需要自定义View属性,也就是在values/attrs.xml中定义属性集;
3、在xml中引入命名空间,设置属性
xmlns:名字="http://schemes.android.com/apk/res/应用包名"
- 4、在代码中读取xml中的属性,初始化视图;
5、测量视图大小;
6、绘制视图内容
2.2.2 View 的尺寸测量
- View 的测量室自定义 View 中最为重要的一步,如果不能正确测量视图的大小,那么将会导致视图显示不完整等情况,这将严重影响 View 的显示效果
2.2.3 Canvas 与 Paint (画布与画笔)
save 与 restore 函数需要配对使用,restore 的使用次数要小于等于 save 函数的使用此时,否则会出现异常。
save 保存原来 Canvas 的状态,restore 恢复 Canvas 之前保存的状态
2.2.4 自定义 ViewGroup
2.3 Scroller 的使用
2.4 让应用更精彩
- 帧动画、补间动画、属性动画(Android3.0之后加入)、VectorDrawable(Android5.0之后加入)
2.4.1 帧动画
- 帧动画,即Frame动画,是一系列图片按照一定的顺序展示的过程
- 实现方式:
1、定义在xml文件中(放置在/res的anim或drawablw目录中),<animation-list>元素必须作为根元素
2、在代码中实现,通过AnimationDrawable对象
推荐使用xml的方式,它将动画代码从复杂的java逻辑中抽离出来,使得动画的定义更易于维护
2.4.2 补间动画
tween动画是操作某个控件,让其展现出旋转、渐变、移动、缩放的一种转换过程
补间动画只能运用在view对象之上,功能相对来说较为局限
2.4.3 属性动画
- 它实际上是一种在一定时间段内不断修改某个对象的某个属性值的机制
2.4.3.1 属性动画的核心类——Value Animator
- 作用:在一定时间段内不断的修改对象的某个属性值
2.4.3.2 对任意属性进行动画操作——Object Animator
- 可以直接对任意对象的任意属性进行动画操作
2.4.3.3 实现丰富多彩的动画效果——AnimatorSet
- AnimatorSet.Builder中的5个核心方法:
函数 | 作用 |
---|---|
after(Animator anim) | 在anim动画执行完之后再执行调用after函数的动画 |
after(long delay) | 将调用after的动画延迟指定毫秒后执行 |
before(Animator anim) | 在anim动画执行完之前再执行调用after函数的动画 |
with(Animator anim) | 将现有的动画和传入的动画同时执行 |
playTogether(Animator...anims) | 将多个动画一起执行 |