第1章 3D特效1
1.1 3D特效概述1
1.1.1 2D坐标系与3D坐标系3
1.1.2 Android中的Camera类5
1.1.3 构造Camera类使用实例8
1.2 Camera类用法详解12
1.2.1 平移12
1.2.2 旋转16
1.2.3 改变Camera的位置20
1.3 实现3D卡片翻转效果23
1.3.1 框架搭建23
1.3.2 效果改进29
1.3.3 正背面显示不同的内容34
1.4 实现小米时钟的触摸倾斜效果37
1.4.1 框架搭建38
1.4.2 实现ClockViewGroup39
1.4.3 ClockViewGroup应用45
第2章 位置矩阵46
2.1 位置矩阵概述46
2.1.1 矩阵运算46
2.1.2 位置矩阵简介48
2.2 Matrix类中函数用法详解(一)51
2.2.1 基本函数51
2.2.2 前乘与后乘55
2.2.3 其他功能函数之缩放(Scale)59
2.2.4 其他功能函数之错切(Skew)67
2.2.5 其他功能函数之setSinCos72
2.3 Matrix类中函数用法详解(二)75
2.3.1 mapPoints75
2.3.2 其他map相关函数77
2.3.3 setPolyToPoly79
2.3.4 setRectToRect82
2.3.5 其他函数85
2.3.6 Matrix与Canvas87
2.4 折叠布局实战(一)——核心原理88
2.4.1 折叠原理概述89
2.4.2 实现完整折叠效果101
2.4.3 添加阴影效果105
2.5 折叠布局实战(二)——折叠菜单108
2.5.1 使用ViewGroup实现折叠效果109
2.5.2 实现折叠菜单114
第3章 派生类型的选择与实例121
3.1 派生类型的选择方法概述121
3.1.1 View类及ViewGroup类的选择121
3.1.2 继承自View类的处理流程123
3.1.3 继承自View子类的处理流程132
3.1.4 继承自ViewGroup类的处理流程135
3.1.5 继承自ViewGroup子控件类140
3.2 自定义EditText144
3.2.1 显示删除图标144
3.2.2 点击删除图标并清空文字147
3.3 实现圆角布局148
3.3.1 实现布局类148
3.3.2 使用布局类149
3.3.3 修复背景问题150
第4章 消息处理154
4.1 Android事件分发机制154
4.1.1 概述154
4.1.2 不包含onInterceptTouchEvent函数的ACTION_DOWN消息传递流程156
4.1.3 onInterceptTouchEvent函数的ACTION_DOWN消息传递流程161
4.1.4 关于ACTION_MOVE和ACTION_UP消息传递流程164
4.1.5 在ACTION_MOVE消息到来时拦截168
4.2 消息拦截实战——实现可拖动的方向按键173
4.2.1 框架搭建174
4.2.2 实现拖动效果178
4.3 坐标系181
4.3.1 屏幕坐标系和数学坐标系的区别182
4.3.2 View坐标系182
4.3.3 MotionEvent提供的函数186
4.4 详解requestDisallowInterceptTouchEvent函数187
4.4.1 requestDisallowInterceptTouchEvent函数概述187
4.4.2 尝试使用requestDisallowInterceptTouchEvent函数187
4.5 滑动冲突处理原理与实战192
4.5.1 常见的滑动冲突场景193
4.5.2 解决滑动冲突问题的思路193
4.5.3 滑动冲突解决方法194
4.5.4 滑动冲突实战196
第5章 多点触控详解203
5.1 多点触控基本知识203
5.1.1 概述203
5.1.2 单点触控与多点触控203
5.1.3 多点触控206
5.1.4 实例:追踪第2根手指207
5.1.5 多点触控与ACTION_MOVE消息211
5.1.6 其他获取函数213
5.2 拖动图片控件与多点触控216
5.2.1 单点触控下的拖动图片控件216
5.2.2 多点触控下的拖动图片控件220
5.3 制作双指缩放控件222
5.3.1 原理概述222
5.3.2 实现可缩放的文本控件223
第6章 工具类228
6.1 Scroller工具类228
6.1.1 探讨scrollTo与scrollBy函数228
6.1.2 Scroller概述234
6.1.3 改造demo236
6.1.4 实战:Android滑块开关240
6.2 ViewDragHelper类简介251
6.2.1 概述251
6.2.2 简单用法252
6.2.3 疑问解答260
6.2.4 边界判断265
6.2.5 onViewReleased函数270
6.3 实现QQ侧边栏效果275
6.3.1 基本功能实现276
6.3.2 添加手指释放时的动画280
6.3.3 展开侧边栏的实现原理281
6.3.4 实现展开侧边栏283
6.3.5 添加侧边栏的展开/关闭动画287
6.4 ViewDragHelper类源码解析289
6.4.1 创建ViewDragHelper实例289
6.4.2 消息不被子控件消费的Touch事件的处理方法291
6.4.3 消息被子控件消费的Touch事件的处理方法314
6.4.4 遗留问题解析320
6.5 ViewConfiguration类323
6.5.1 距离相关函数324
6.5.2 速度相关函数325
6.5.3 时间相关函数325
6.5.4 其他函数326
第7章 RecyclerView327
7.1 RecyclerView概述328
7.1.1 导入support-v7包328
7.1.2 RecyclerView的简单使用329
7.1.3 其他LayoutManager334
7.1.4 加载不同类型的View340
7.2 添加分割线345
7.2.1 引入ItemDecoration345
7.2.2 自定义ItemDecoration347
7.3 自定义LayoutManager359
7.3.1 初始化展示界面360
7.3.2 添加滑动效果362
7.4 RecyclerView回收复用HolderView的实现方式(一)367
7.4.1 RecyclerView是否会自动回收复用HolderView368
7.4.2 RecyclerView回收复用HolderView的原理370
7.4.3 给CustomLayoutManager添加回收复用HolderView功能374
7.5 RecyclerView回收复用HolderView的实现方式(二)386
7.5.1 初步实现386
7.5.2 继续优化:回收时的布局392
7.6 ItemTouchHelper396
7.6.1 ItemTouchHelper的基本功能实现397
7.6.2 真正实现滑动删除与拖曳移动401
7.6.3 其他功能:交互时的背景变化402
7.6.4 GridView中的滑动/拖动效果405
7.6.5 getMovementFlags中的各种flag407
7.6.6 禁用拖曳与指定拖曳409
7.6.7 onChildDraw函数417
7.6.8 其他函数419
7.6.9 布局方向421
第8章 RecyclerView特效实战423
8.1 滑动画廊控件423
8.1.1 实现item布局424
8.1.2 实现横向布局427
8.1.3 实现横向滑动430
8.1.4 实现卡片叠加433
8.1.5 修改卡片起始位置434
8.1.6 更改默认显示顺序435
8.1.7 添加滑动缩放功能441
8.1.8 bug修复444
8.1.9 拓展1:fling校正446
8.1.10 拓展2:制作3D画廊452
8.2 仿QQ列表滑动删除效果454
8.2.1 有问题的ItemTouchHelper之实现demo455
8.2.2 有问题的ItemTouchHelper之显示出底部操作栏459
8.2.3 改造ItemTouchHelper466
8.2.4 使用ItemTouchHelperExtension实现467
8.3 使用SnapHelper实现滑动对齐470
8.3.1 SnapHelper概述471
8.3.2 LinearSnapHelper的使用472
8.3.3 PagerSnapHelper的使用475
第9章 精彩自定义控件实战476
9.1 华为时钟476
9.1.1 实现原理477
9.1.2 实现遮罩叠加477
9.1.3 实现遮罩旋转481
9.1.4 显示时间483
9.1.5 封装组件486
9.2 圆环动画488
9.2.1 圆环扇形原理489
9.2.2 初步实现控件圆环效果492
9.2.3 制作多彩圆环497
9.2.4 实现渐显动画499
9.3 自定义控件与组合控件实战503
9.3.1 初步实现VolumeView505
9.3.2 实现音量动效511
9.3.3 组合控件514
第10章 Lottie动画框架519
10.1 Lottie概述519
10.1.1 Lottie是什么519
10.1.2 Lottie demo之基本功能521
10.1.3 Lottie demo之在线加载Lottie523
10.1.4 Lottie demo之其他功能528
10.1.5 Lottie社区529
10.1.6 Lottie动画优势531
10.2 Lottie与AE531
10.2.1 环境安装531
10.2.2 Lottie完整使用流程532
10.2.3 Lottie JSON与AE536
10.2.4 图片图层的使用542
10.2.5 文本图层的使用544
10.2.6 Lottie支持的AE功能列表546
10.3 Lottie的使用方法547
10.3.1 初步使用Lottie547
10.3.2 Lottie在代码中的使用552
10.4 Lottie核心原理567
10.4.1 概述567
10.4.2 初始化567
10.4.3 测量与布局570
10.4.4 绘图571
10.4.5 如何动起来573
10.4.6 疑问解答573