Android 自定義控件高級進階與精彩實例

啟艦

  • 出版商: 電子工業
  • 出版日期: 2020-12-01
  • 售價: $774
  • 貴賓價: 9.5$735
  • 語言: 簡體中文
  • 頁數: 588
  • 裝訂: 平裝
  • ISBN: 7121402084
  • ISBN-13: 9787121402081
  • 相關分類: Android
  • 立即出貨 (庫存=1)

買這商品的人也買了...

商品描述

本書專註於介紹Android自定義控件進階知識,並通過精彩的案例對各種繪制、動畫技術進行了糅合講解,讀者可以通過本書從宏觀層面、源碼層面對Android自定義控件建立完整的認識。本書主要內容有3D特效的實現、高級矩陣知識、消息處理機制、派生類型的選擇方法、多點觸控及輔助類、RecyclerView的使用方法及3D卡片的實現、動畫框架Lottie的講解與實戰等。本書適合中高級從業者對Android自定義控件相關知識進行查漏補缺和深入學習。

作者簡介

本名張恩偉,Android研發專家、CSDN博客專家、CSDN博客之星,《Android自定義控件入門與實戰》《Android自定義控件高級進階與精彩實例》作者,電子工業出版社博文視點優秀作者,曾就職於阿里巴巴,現就職於vivo。

目錄大綱

第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