描述
开 本: 大16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787121402081
1 本书专注于介绍Android自定义控件进阶知识,通过精彩的案例对各种绘制、动画技术进行了糅合讲解。
2 Android自定义控件涉及动画和色彩,本书将图片地址制作成二维码,可供读者扫描观看。
3 适合中高级从业者对Android自定义控件相关知识进行查漏补缺和深入学习。
4.本书配有源码,可下载参考。
本书专注于介绍Android自定义控件进阶知识,并通过精彩的案例对各种绘制、动画技术进行了糅合讲解,读者可以通过本书从宏观层面、源码层面对Android自定义控件建立完整的认识。本书主要内容有3D特效的实现、高级矩阵知识、消息处理机制、派生类型的选择方法、多点触控及辅助类、RecyclerView的使用方法及3D卡片的实现、动画框架Lottie的讲解与实战等。
本书适合中高级从业者对Android自定义控件相关知识进行查漏补缺和深入学习。
第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 实现ClockViewGroup 39
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 其他功能函数之setSinCos 72
2.3 Matrix类中函数用法详解(二) 75
2.3.1 mapPoints 75
2.3.2 其他map相关函数 77
2.3.3 setPolyToPoly 79
2.3.4 setRectToRect 82
2.3.5 其他函数 85
2.3.6 Matrix与Canvas 87
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 自定义EditText 144
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 改造demo 236
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章 RecyclerView 327
7.1 RecyclerView概述 328
7.1.1 导入support-v7包 328
7.1.2 RecyclerView的简单使用 329
7.1.3 其他LayoutManager 334
7.1.4 加载不同类型的View 340
7.2 添加分割线 345
7.2.1 引入ItemDecoration 345
7.2.2 自定义ItemDecoration 347
7.3 自定义LayoutManager 359
7.3.1 初始化展示界面 360
7.3.2 添加滑动效果 362
7.4 RecyclerView回收复用HolderView的实现方式(一) 367
7.4.1 RecyclerView是否会自动回收复用HolderView 368
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 ItemTouchHelper 396
7.6.1 ItemTouchHelper的基本功能实现 397
7.6.2 真正实现滑动删除与拖曳移动 401
7.6.3 其他功能:交互时的背景变化 402
7.6.4 GridView中的滑动/拖动效果 405
7.6.5 getMovementFlags中的各种flag 407
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之实现demo 455
8.2.2 有问题的ItemTouchHelper之显示出底部操作栏 459
8.2.3 改造ItemTouchHelper 466
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 初步实现VolumeView 505
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之在线加载Lottie 523
10.1.4 Lottie demo之其他功能 528
10.1.5 Lottie社区 529
10.1.6 Lottie动画优势 531
10.2 Lottie与AE 531
10.2.1 环境安装 531
10.2.2 Lottie完整使用流程 532
10.2.3 Lottie JSON与AE 536
10.2.4 图片图层的使用 542
10.2.5 文本图层的使用 544
10.2.6 Lottie支持的AE功能列表 546
10.3 Lottie的使用方法 547
10.3.1 初步使用Lottie 547
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
对我而言,2018年注定是不平凡的一年。那年7月份,创业一年的我,把公司卖了,几个小伙伴都各自找到了新去处。也是在那年7月份,我的第一本书出版了,书名叫《Android自定义控件开发入门与实战》,一年过去后,这本书在各大售书平台上的好评率高达99%,同年年底我也有幸获得了电子工业出版社博文视点公司颁发的优秀作者奖杯。
原本我不打算将Android自定义控件相关内容整理成书,因为纸质媒介很难完美地表达出动画的效果和色彩。不过,电子工业出版社的付睿编辑给予了极大的帮助,经过协调,尝试使用二维码的方式来展示动画和丰富的色彩。想必,很少有图书大量使用二维码吧。正是这些二维码,在很大程度上降低了自定义控件的讲解难度,付编辑的小小创新提议是我这本自定义控件图书能顺利出版的基石。在《Android自定义控件开发入门与实战》一书出版后,我收到了很多同学的勘误和反馈,非常感谢大家的热心帮助,是你们使后来者能够少走弯路。
当然,《Android自定义控件开发入门与实战》一书涉及的知识点非常多而繁杂。很多同学反馈,内容过于基础,没有综合应用和精彩实例;没有涉及手势、消息处理等相关知识;对自定义控件派生类型的讲解不够深入。非常感谢大家的热心反馈,如果不是你们的意见和建议,将不会有《Android自定义控件高级进阶与精彩实例》这本书的诞生。
写过博客的同学都知道,写博文很耗时,有时为了能完整地讲明白一个技术,需要深入源码、了解原理。而且了解得越深越会发现,很多知识点网上也没有。写书更是如此,一般情况下,若你要输出一碗水的知识,你所储备的知识量要达到一桶水那么多,不然无法做到深入浅出。无疑,写书也很耗时,一本好的技术书,没有一年时间很难写出来。对于这本书,我用了近一年半的时间来搜集资料和撰写内容,自定义控件高级进阶的知识实在是太多了。对我来说,有针对性地把Android自定义控件的核心知识输出给大家,是一个很大的挑战。
读过我第一本书的读者应该知道,我喜欢在每章开头加一小段激励自己和他人的话,因为学习新知识是痛苦的,希望这些话能激发你内心对成功的渴望,让你坚持学下去。
本书将知识内容严格限制在高级进阶范围内,所以在《Android自定义控件开发入门与实战》一书中讲解过的知识,都没有在本书中详细讲解,默认大家已经有所了解。可以说,本书建立在第一本书《Android自定义控件开发入门与实战》的基础上,如果有对Android自定义控件不够了解的同学,或者在阅读本书时觉得有障碍的同学,请先阅读《Android自定义控件开发入门与实战》一书来补充基础知识。本书中凡涉及《Android自定义控件开发入门与实战》这本书的知识时,都会给出具体的章节编号,大家可以自行查阅。
本书第1章讲解了3D特效的实现,使大家开篇就能看到比较炫酷的Android自定义控件效果。第2章补充了第一本书中没有讲解到的矩阵相关知识,在第一本书中只讲解了色彩矩阵,而除了色彩矩阵,还有位置矩阵。第3章主要解答了很多同学关于如何选择派生类型的疑惑,选择继承自View,还是ViewGroup,还是它们的子控件呢?在这章中都有详细的讲解。第4、5、6章中主要对辅助类进行了讲解,比如消息处理、多点触控等内容。第7章和第8章详细讲解了常用的RecyclerView的使用方法及精彩控件。第9章选取了几个实例,以对学习过的Android自定义控件相关知识进行实践。第10章则讲解了最新的动画框架Lottie的使用方法,这个框架能极大地缩短自定义控件的开发时长,提高开发效率。
然而不安分的人无论什么时候都是不安分的。在接触的小伙伴多了以后,我发现很多人对行业规则和行业本身的认知并不深刻,这导致很多在校大学生,甚至工作几年的小伙伴们,经常非常迷茫。因此,在本书完成之际,我开始做公众号,取名“启舰杂谈”。在这个公众号里,我把自己个人多年的经历、见解化成文字分享给大家,希望能影响一些人,使更多的人少走弯路。每个人的人生都是不同的,每个人的成功也必然是多种多样的。我可能无法告诉你,怎么做才能成功,但我可以告诉你,怎么做肯定是不行的。
感谢vivo,使我在这一年中无论从技术上还是管理水平上,都取得了长足的进步。感谢我的同事们,跟你们在一起工作真的很开心。感谢灰灰,我最好的朋友,感谢你多年来的支持与鼓励,以及当年毅然决然陪我创业的信任。感谢超超,真的很想念青岛上学时与你同窗的日子。感谢我的妻子聂倩,是你包揽了照顾孩子的任务,这才使我有充足的时间完成这本书。感谢妈妈,如果不是你帮我照顾整个家,我们也不可能生活得如此惬意。感谢我的女儿雯雯,爸爸的天使,你使我有了奋斗的目标和方向,爸爸永远爱你。宝贝女儿,你是跟着爸爸的第一本书一起诞生的,而在第二本书完成时,你已经3岁了。
最后,将我当年辞职创业时送给自己的一句话也送给大家:当你回首往事时,不以虚度年华而悔恨,不以碌碌无为而羞耻,那你就可以骄傲地跟自己讲,你不负此生。
评论
还没有评论。