前言
說不焦慮其實是假的,因為無論是現在還是最近幾年,很早就有人察覺Android開發的野蠻生長時代已經過去。過去的優勢是市場需要,這個技術少有人有,所以在搶占市場的時候,基本上滿足需要就已經可以了。但是現在,各式各樣的APP層出不窮,APP的質量成為新的競爭標準。這也意味著不管是系統設計還是性能優化等方面,市場都給Android開發者提出了更高的要求。那么,Android是不是真的不吃香了呢?其實不是的,高級及以上還有很大的需求缺口,非常稀缺人才。但是初級開發者真的已經不吃香了。喪氣的說一句,初級學者在市場中的競爭優勢其實是很少的。
我們一樣也可以從Android開發的需求崗位來了解目前的市場情況。
一.view渲染機制分為:
- onLaout與onMeasure
- onDraw映射機制
二.常用view有:
1.RecycleView
- 解讀源碼
- 布局管理器LayoutManager
- 條目裝飾ItemDecoration
- ViewHolder與回收復用機制
2.CardView
- 源碼的解答
- 圓角陰影實現原理
- 5.0以下陰影與邊距的適配
3.viewpager
- 加載機制和如何優化
- 如何與Fragment結合
4.Webview
- 原理分析
- JS與java交互
- 多線程WebView使用
- WebView和native的通信框架
三.布局ViewGroup
- ConstaintLayout
- LinearLayout
- RelativeLayout
- FrameLayout
- GridLayout
四.View的繪制流程
4.1自定義控件:
1、組合控件。這種自定義控件不需要我們自己繪制,而是使用原生控件組合成的新控件。如標題欄。
2、繼承原有的控件。這種自定義控件在原生控件提供的方法外,可以自己添加一些方法。如制作圓角,圓形圖片。
3、完全自定義控件:這個View上所展現的內容全部都是我們自己繪制出來的。比如說制作水波紋進度條。
View的繪制流程:OnMeasure()——>OnLayout()——>OnDraw()
- 第一步:
OnMeasure()
:測量視圖大小。從頂層父View到子View遞歸調用measure方法,measure方法又回調OnMeasure。 - 第二步:
OnLayout()
:確定View位置,進行頁面布局。從頂層父View向子View的遞歸調用view.layout方法的過程,即父View根據上一步measure子View所得到的布局大小和布局參數,將子View放在合適的位置上。 - 第三步:
OnDraw()
:繪制視圖。
ViewRoot創建一個Canvas對象,然后調用OnDraw()。
六個步驟:
- 繪制視圖的背景;
- 保存畫布的圖層(Layer);
- 繪制View的內容;
- 繪制View子視圖,如果沒有就不用;
- 還原圖層(Layer);
- 繪制滾動條。
4.2View,ViewGroup事件分發
1.Touch事件分發中只有兩個主角:ViewGroup和View。
ViewGroup
包含onInterceptTouchEvent
、dispatchTouchEvent
、onTouchEvent
三個相關事件。
View
包含dispatchTouchEvent
、onTouchEvent
兩個相關事件。
其中ViewGroup又繼承于View。
2.ViewGroup和View組成了一個樹狀結構,根節點為Activity內部包含的一個ViewGroup。
3.觸摸事件由Action_Down、Action_Move、Aciton_UP
組成,其中一次完整的觸摸事件中,Down和Up都只有一個,Move有若干個,可以為0個。
4.當Acitivty
接收到Touch事件時,將遍歷子View進行Down事件的分發。ViewGroup
的遍歷可以看成是遞歸的。分發的目的是為了找到真正要處理本次完整觸摸事件的View,這個View會在onTouchuEvent
結果返回true。
5.當某個子View返回true時,會中止Down事件的分發,同時在ViewGroup
中記錄該子View。接下去的Move和Up事件將由該子View直接進行處理。由于子View是保存在ViewGroup
中的,多層ViewGroup
的節點結構時,上級ViewGroup
保存的會是真實處理事件的View所在的ViewGroup
對象:如ViewGroup0-ViewGroup1-TextView
的結構中,TextView
返回了true,它將被保存在ViewGroup1
中,而ViewGroup1
也會返回true,被保存在ViewGroup0
中。當Move和UP事件來時,會先從ViewGroup0
傳遞至ViewGroup1
,再由ViewGroup1
傳遞至TextView
。
6.當ViewGroup
中所有子View都不捕獲Down事件時,將觸發ViewGroup
自身的onTouch
事件。觸發的方式是調用super.dispatchTouchEvent
函數,即父類View的dispatchTouchEvent
方法。在所有子View都不處理的情況下,觸發Acitivity的onTouchEvent
方法。
7.onInterceptTouchEvent
有兩個作用:
- 攔截Down事件的分發。
- 中止Up和Move事件向目標View傳遞,使得目標View所在的ViewGroup捕獲Up和Move事件。
實戰系列
話不多說,Android實戰系列集合都已經系統分類好,由于文章篇幅問題沒法過多展示,獲取學習筆記鏈接:點擊我的騰訊文檔免費獲取
:點擊我的騰訊文檔免費獲取**
[外鏈圖片轉存中…(img-QF9kcHda-1620830908178)]