第1章 自定义控件 1
1.1 View的绘制流程 1
1.1.1 View和ViewGroup 1
1.1.2 View的绘制流程 4
1.1.3 ViewGroup的绘制流程 8
1.1.4 View绘制流程深入解析 11
1.2 View的触摸事件 14
1.2.1 触摸事件的类型 14
1.2.2 触摸事件的传递过程 17
1.2.3 事件传递细节 19
1.3 自定义控件常用方法总结 29
1.3.1 绘制流程相关 29
1.3.2 事件处理相关 32
1.3.3 其他 42
1.4 自定义控件案例 42
1.4.1 柱状图 42
1.4.2 折线图 50
1.4.3 曲线图 60
1.4.4 渐变圆弧进度条 64
1.4.5 卡片滑动切换 68
1.4.6 ViewPager圆形指示器 74
1.5 自定义控件性能优化 78
第2章 轮子 80
2.1 AppBrain平台 80
2.2 Butter Knife 83
2.2.1 编译时注解 83
2.2.2 Element 85
2.2.3 编译时注解案例 85
2.2.4 Butter Knife源码分析 93
2.2.5 Butter Knife Zelezny插件的实现 102
2.3 EventBus 109
2.3.1 EventBus的使用 110
2.3.2 EventBus源码分析 113
2.3.3 EventBus 3.0索引加速 121
2.4 Dagger2 130
2.4.1 Dagger2的使用 132
2.4.2 Dagger2源码分析 135
2.4.3 Dagger2进阶 150
2.4.4 Component之间的关系 158
2.4.5 Dagger.Android 165
2.5 OkHttp 172
2.5.1 OkHttp的使用 172
2.5.2 OkHttp源码分析 181
2.6 Retrofit 194
2.6.1 Retrofit的使用 195
2.6.2 Retrofit源码分析 199
2.7 Volley 211
2.7.1 Volley的工作流程 212
2.7.2 Volley的使用 213
2.7.3 Volley的封装 216
2.7.4 Volley源码分析 222
2.8 RxJava 232
2.8.1 RxJava的使用 233
2.8.2 RxJava的源码分析 263
第3章 Android应用架构 273
3.1 todo-mvp 275
3.1.1 MVP 275
3.1.2 todo-mvp的实现 276
3.2 todo-mvp-clean 281
3.2.1 Clean架构 281
3.2.2 Clean架构的Android实现 282
3.2.3 todo-mvp-clean的实现 283
3.3 todo-mvp-dagger 289
3.3.1 AppComponent 289
3.3.2 依赖注入 297
3.4 todo-mvp-rxjava 305
3.5 todo-mvvm-databinding 308
3.5.1 MWM 308
3.5.2 Data Binding Library 308
3.5.3 todo-mvvm-databinding的实现 314
3.6 todo-mvvm-live 318
3.6.1 Architecture Components 318
3.6.2 todo-mvvm-live的实现 326
第4章 AndroidPlus项目实战 329
4.1 需求分析 329
4.2 产品设计 330
4.2.1 Material Design 330
4.2.2 思维导图 332
4.2.3 架构设计 333
4.3 Java实现 334
4.3.1 项目准备 334
4.3.2 Dagger集成 337
4.3.3 欢迎界面 339
4.3.4 登录注册 341
4.3.5 主界面 345
4.3.6 首页 348
4.3.7 问题详情 363
4.3.8 回答详情 368
4.3.9 评论 370
4.3.10 分享文章 372
4.3.11 文章 374
4.3.12 个人中心 377
4.3.13 用户详情 388
4.3.14 异常上报、运营统计和应用升级 391
4.3.15 代码混淆 393
4.4 Kotlin实现 394
第5章 开发实践 403
5.1 Android Studio中的Git实践 403
5.1.1 创建远程仓库 403
5.1.2 .gitignore 404
5.1.3 提交和推送 405
5.1.4 分支 407
5.1.5 获取(Fetch) 408
5.1.6 拉取(Pull) 409
5.1.7 衍合(Rebase) 409
5.1.8 Git Flow 410
5.1.9 分支合并 411
5.1.10 移动HEAD 413
5.1.11 贮藏(Stash) 414
5.1.12 重置(Reset) 414
5.1.13 遴选(Cherry Pick) 416
5.2 Android屏幕适配 416
5.2.1 屏幕相关概念 416
5.2.2 图片适配 418
5.2.3 dimen 419
5.2.4 weight 420
5.2.5 百分比布局 422
5.2.6 ConstraintLayout 423
5.2.7 平板适配 427
5.2.8 RTL布局 428
5.3 Android视频播放器 429
5.3.1 ijkPlayer 431
5.3.2 Vitamio 435
5.3.3 PLDroidPlayer 437
5.3.4 测试开发 446
5.4 声网直播实践 450
5.4.1 频道列表 452
5.4.2 视频群聊 454