帶你全面解析Android框架體系架構view篇

人生困難重重,在漫長而艱辛的前行路上,堅持不懈、腳踏實地的“低頭拉車”固然重要。但認清形勢、找準目標的“擡頭看路”也很關鍵,甚至決定着你能否達到成功彼岸。只尋求遠方的夢想,而不付出當下的努力,那是迷夢;只知道埋頭苦幹,而不認清方向,那是徒勞。

總結面試必備技能和自己的一些感想學習路線圖

更多完整項目下載。未完待續。源碼。圖文知識後續上傳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
包含onInterceptTouchEventdispatchTouchEventonTouchEvent三個相關事件。

View
包含dispatchTouchEventonTouchEvent兩個相關事件。
其中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。
可以點關於我 聯繫我獲取

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章