人生困難重重,在漫長而艱辛的前行路上,堅持不懈、腳踏實地的“低頭拉車”固然重要。但認清形勢、找準目標的“擡頭看路”也很關鍵,甚至決定着你能否達到成功彼岸。只尋求遠方的夢想,而不付出當下的努力,那是迷夢;只知道埋頭苦幹,而不認清方向,那是徒勞。
總結面試必備技能和自己的一些感想學習路線圖
更多完整項目下載。未完待續。源碼。圖文知識後續上傳github。
可以點擊關於我 聯繫我獲取
一.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事件。
更多完整項目下載。未完待續。源碼。圖文知識後續上傳github。
可以點關於我 聯繫我獲取