Android自定義控件高級進階與精彩實例( 簡體 字) | |
作者:啟艦 | 類別:1. -> 程式設計 -> 手機程式 -> Android |
出版社:電子工業出版社 | 3dWoo書號: 53865 詢問書籍請說出此書號! 有庫存 NT售價: 645 元 |
出版日:12/1/2020 | |
頁數:588 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787121402081 | 加入購物車 │加到我的最愛 (請先登入會員) |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第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 本書專注于介紹Android自定義控件進階知識,并通過精彩的案例對各種繪制、動畫技術進行了糅合講解,讀者可以通過本書從宏觀層面、源碼層面對Android自定義控件建立完整的認識。本書主要內容有3D特效的實現、高級矩陣知識、消息處理機制、派生類型的選擇方法、多點觸控及輔助類、RecyclerView的使用方法及3D卡片的實現、動畫框架Lottie的講解與實戰等。本書適合中高級從業者對Android自定義控件相關知識進行查漏補缺和深入學習。
對我而言,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歲了。 最后,將我當年辭職創業時送給自己的一句話也送給大家:當你回首往事時,不以虛度年華而悔恨,不以碌碌無為而羞恥,那你就可以驕傲地跟自己講,你不負此生。 |