本書是一部Android開發的進階實戰教程,由點及面、由原理到實戰,帶領讀者一步一步深入探索App開發的神奇世界。全書共分為13章。其中,前5章是單機部分,主要講解App的圖像加工、事件交互、動畫特效、手機閱讀、三維處理等App開發的高級進階;中間4章是聯網部分,主要講解App的網絡通信、音頻處理、視頻處理、定位導航等網絡交互的高級進階;后4章涉及人工智能方面的內容,主要講解物聯網、智能語音、人臉識別、在線直播等智能化應用進階。書中在講解知識點的同時給出了大量實戰范例,各章末尾都提供了精心設計的實戰項目(共14個),所有實戰項目都提供了完整的源碼,方便讀者迅速將所學的知識運用到實際開發中。這14個流行App是可愛大頭貼、摳圖工具、動感影集、電子書架、全景相冊、即時聊天、長音頻分享、短視頻分享、附近交友、智能小車、問答機器人、智慧天眼、視頻通話、直播帶貨。另外,本書還講解了掃一掃、搖一搖、指南針、地球儀、衛星渾天儀等趣味應用。
本書既適合Android開發的廣大從業者、有志于轉型App開發的程序員、App開發的業余愛好者閱讀,也可作為大中專院校與培訓機構的Android開發課程的教材。
第1章圖像加工 1
1.1圖像裝飾 1
1.1.1卡片視圖 1
1.1.2給圖像添加裝飾 3
1.1.3給圖像添加水波特效 6
1.2位圖加工 8
1.2.1轉換位圖的像素色彩 8
1.2.2裁剪位圖內部區域 10
1.2.3利用矩陣變換位圖 12
1.3自定義圖形 14
1.3.1位圖與圖形互轉 14
1.3.2剪裁圖形內部區域 15
1.3.3給圖形添加小部件 17
1.4實戰項目:青蔥歲月之可愛大頭貼 20
1.4.1需求描述 20
1.4.2功能分析 20
1.4.3效果展示 22
1.5小結 23
1.6動手練習 23
第2章事件交互 24
2.1按鍵事件 24
2.1.1檢測軟鍵盤 24
2.1.2檢測物理按鍵 26
2.1.3接管返回按鍵 27
2.2觸摸事件 29
2.2.1手勢事件的分發流程 29
2.2.2接管手勢事件處理 33
2.2.3跟蹤滑動軌跡實現手寫簽名 36
2.3根據觸摸行為辨別手勢動作 38
2.3.1區分點擊和長按動作 38
2.3.2識別手勢滑動的方向 40
2.3.3辨別縮放與旋轉手勢 42
2.4手勢沖突處理 46
2.4.1上下滾動與左右滑動的沖突處理 46
2.4.2內部滑動與翻頁滑動的沖突處理 49
2.4.3正常下拉與下拉刷新的沖突處理 53
2.5實戰項目:仿美圖秀秀的摳圖工具 56
2.5.1需求描述 56
2.5.2功能分析 57
2.5.3效果展示 58
2.6小結 59
2.7動手練習 59
第3章動畫特效 60
3.1幀動畫 60
3.1.1幀動畫的實現 60
3.1.2顯示動圖特效 62
3.1.3淡入淡出動畫 66
3.2補間動畫 67
3.2.1補間動畫的種類 67
3.2.2補間動畫的原理 72
3.2.3集合動畫 74
3.3屬性動畫 76
3.3.1常規的屬性動畫 76
3.3.2屬性動畫組合 78
3.3.3插值器和估值器 80
3.3.4利用估值器實現彈幕動畫 83
3.4遮罩動畫及滾動器 86
3.4.1畫布的繪圖層次 86
3.4.2實現百葉窗動畫 90
3.4.3利用滾動器實現ping滑翻頁 94
3.5實戰項目:仿手機QQ的動感影集 97
3.5.1需求描述 98
3.5.2功能分析 99
3.5.3效果展示 102
3.6小結 104
3.7動手練習 104
第4章手機閱讀 105
4.1貝塞爾曲線 105
4.1.1貝塞爾曲線的原理 105
4.1.2實現波浪起伏動畫 107
4.1.3實現給主播刷禮物的特效 108
4.2瀏覽PDF文件 111
4.2.1PDF文件渲染器 111
4.2.2實現ping滑翻書效果 113
4.2.3實現卷曲翻書動畫 116
4.3JNI開發 122
4.3.1NDK環境搭建 122
4.3.2創建JNI接口 125
4.3.3JNI實現加解密 128
4.3.4采取CMake編譯方式 132
4.4實戰項目:筆墨飄香之電子書架 134
4.4.1需求描述 134
4.4.2功能分析 136
4.4.3效果展示 139
4.5小結 141
4.6動手練習 141
第5章三維處理 142
5.1OpenGL 142
5.1.1三維投影 142
5.1.2輪廓勾勒 147
5.1.3紋理貼圖 152
5.2OpenGLES 155
5.2.1著色器小程序 155
5.2.2通過矩陣變換調整視角 160
5.2.3給三維物體貼圖 163
5.3Vulkan 166
5.3.1下一代OpenGLVulkan 166
5.3.2簡單的Vulkan例子 167
5.3.3Vulkan的實戰應用 169
5.4實戰項目:虛擬現實的全景相冊 171
5.4.1需求描述 171
5.4.2功能分析 172
5.4.3效果展示 176
5.5小結 177
5.6動手練習 177
第6章網絡通信 178
6.1多線程 178
6.1.1通過runOnUiThread快速操縱界面 178
6.1.2利用線程池Executor調度異步任務 181
6.1.3工作管理器WorkManager 183
6.2HTTP訪問 186
6.2.1通過okhttp調用HTTP接口 187
6.2.2使用okhttp下載和上傳文件 191
6.2.3實現下拉刷新和上拉加載 196
6.3即時通信 200
6.3.1通過SocketIO傳輸文本消息 200
6.3.2通過SocketIO傳輸圖片消息 203
6.3.3利用WebSocket傳輸消息 206
6.4實戰項目:仿微信的私聊和群聊 209
6.4.1需求描述 209
6.4.2功能分析 211
6.4.3效果展示 217
6.5小結 221
6.6動手練習 221
第7章音韻留聲 222
7.1音量調節 222
7.1.1拖動條和滑動條 222
7.1.2音頻管理器 225
7.1.3音量調節對話框 226
7.2音頻錄播 230
7.2.1普通音頻的錄播 230
7.2.2原始音頻的錄播 235
7.2.3自定義音頻控制條 238
7.3音效增強 244
7.3.1鈴聲播放 244
7.3.2聲音池調度 246
7.3.3錄制WAV音頻 249
7.3.4錄制MP3音頻 253
7.4實戰項目:仿喜馬拉雅的聽說書 257
7.4.1需求描述 257
7.4.2功能分析 259
7.4.3效果展示 262
7.5小結 265
7.6動手練習 265
第8章影像記錄 266
8.1經典相機 266
8.1.1表面視圖和紋理視圖 266
8.1.2使用經典相機拍照 268
8.1.3使用經典相機錄像 273
8.1.4自定義視頻控制條 276
8.2二代相機 279
8.2.1使用二代相機拍照 280
8.2.2使用二代相機錄像 286
8.2.3新型播放器ExoPlayer 290
8.3畫面截取 294
8.3.1截取視頻的某幀 294
8.3.2自定義懸浮窗 296
8.3.3對屏幕畫面截圖 301
8.4實戰項目:仿抖音的短視頻分享 305
8.4.1需求描述 305
8.4.2功能分析 308
8.4.3效果展示 311
8.5小結 313
8.6動手練習 313
第9章定位導航 314
9.1基礎定位 314
9.1.1開啟定位功能 314
9.1.2獲取定位信息 316
9.1.3根據經緯度查找詳細地址 321
9.2擴展定位 323
9.2.1獲取照片里的位置信息 323
9.2.2全球衛星導航系統 327
9.2.3室內WiFi定位 330
9.3地圖導航 336
9.3.1集成騰訊地圖 336
9.3.2顯示地圖面板 339
9.3.3獲取地點信息 341
9.3.4規劃導航路線 343
9.4實戰項目:仿微信的附近的人 347
9.4.1需求描述 347
9.4.2功能分析 349
9.4.3效果展示 352
9.5小結 355
9.6動手練習 355
第10章物聯網 356
10.1傳感器 356
10.1.1傳感器的種類 356
10.1.2搖一搖加速度傳感器 358
10.1.3指南針磁場傳感器 360
10.1.4計步器、感光器和陀螺儀 362
10.2傳統藍牙 365
10.2.1藍牙設備配對 365
10.2.2藍牙音頻傳輸 371
10.2.3點對點藍牙通信 374
10.3低功耗藍牙 381
10.3.1掃描BLE設備 381
10.3.2發送BLE廣播 387
10.3.3通過主從BLE實現聊天應用 390
10.4實戰項目:自動駕駛的智能小車 397
10.4.1需求描述 397
10.4.2功能分析 397
10.4.3效果展示 401
10.5小結 403
10.6動手練習 403
第11章智能語音 404
11.1原生語音處理 404
11.1.1系統自帶的語音引擎 404
11.1.2文字轉語音 406
11.1.3原生的語音識別 409
11.2在線語音處理 411
11.2.1中文轉拼音 411
11.2.2在線語音合成 414
11.2.3在線語音識別 417
11.3基于機器學習的語音推斷 421
11.3.1TensorFlow簡介 422
11.3.2TensorFlowLite 423
11.3.3從語音中識別指令 425
11.4實戰項目:你問我答之小小機器人 426
11.4.1需求描述 426
11.4.2功能分析 427
11.4.3效果展示 433
11.5小結 437
11.6動手練習 437
第12章人臉識別 438
12.1簡單圖像識別 438
12.1.1自動識別驗證碼 438
12.1.2生成二維碼圖片 442
12.1.3掃描識別二維碼 444
12.2基于計算機視覺的人臉識別 449
12.2.1檢測圖像中的人臉 449
12.2.2OpenCV簡介及其集成 452
12.2.3利用OpenCV檢測人臉 454
12.3人臉識別的更多應用 457
12.3.1借助攝像頭實時檢測人臉 457
12.3.2比較兩張人臉的相似程度 460
12.3.3根據人臉估算性別和年齡 463
12.4實戰項目:尋人神#器之智慧天眼 466
12.4.1需求描述 467
12.4.2功能分析 467
12.4.3效果展示 470
12.5小結 471
12.6動手練習 472
第13章在線直播 473
13.1搭建WebRTC的服務端 473
13.1.1WebRTC的系統架構 473
13.1.2搭建信令服務器 475
13.1.3搭建穿透服務器 477
13.2給App集成WebRTC 480
13.2.1引入WebRTC開源庫 480
13.2.2實現WebRTC的發起方 484
13.2.3實現WebRTC的接收方 487
13.3實戰項目:仿微信的視頻通話 489
13.3.1需求描述 490
13.3.2功能分析 491
13.3.3效果展示 495
13.4實戰項目:仿拼多多的直播帶貨 497
13.4.1需求描述 497
13.4.2功能分析 498
13.4.3效果展示 504
13.5小結 507
13.6動手練習 507
附錄A移動互聯網行業的新技術發展簡表 508
附錄BAndroid各版本的新增功能簡表 510
附錄CAndroid常用開發庫說明簡表 512
附錄D移動開發專業術語索引 514
附錄E本書的服務端程序說明 517