android层级关系图,画出 View 的层级 3D 图和树形图来分析层级关系
HierarchyLayout 介紹
HierarchyLayout是一個自定義的ViewGroup工具,用于分析視圖的層級關系,并畫出層級樹的結構圖和可交互的3D 層級View:
HiearchyLayout的靜態圖,實際是可隨手勢改變 3D 形態的。
hierarchyView.jpeg
hierarchyViewNode.jpeg
hierarchyNode.jpeg
使用方法
HierarchyLayout 只有一個文件,使用很簡便,只需要把它當作一個普通的LinearLayout根布局就可以。可用 xml 根布局,也可用new 構造動態添加都行。
例如 Activity 或 Fragment 的根布局使用:
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent" >
//這里是其它xml 容器或 View .
運行后就會出現一個層級分析界面,頂部是概要信息,層級顯示最大層級數,和平均層級數,結點顯示所有的結點總數和 ViewGroup 型及 View 型的數目,測繪顯示的是最近一次measure layout draw 的時間。
注意 HierarchyLayout 只能分析出它自身結點及其包含的直接或間接子結點的層級關系,若將它安裝在 Activity 的DecorView下就可分析出整個 Window 的層級信息。
實現原理分三部
作為根布局在onLayout 后 立即遞歸分析所有包含的子View信息,如結點類型,相對HierarchyLayout的層數,位置,父親和孩子等依賴關系 并構造一個完整的樹結構記錄。
畫樹需要根據每層所在位置和葉子數計算權重 來決定每個結點在視圖上畫出的位置坐標并畫圓,每個結點連接父結點畫線就構成樹。
畫3D層級圖形就是在第一部基礎上,一層一層的計算偏移量并用view.draw(canvas)來畫某一個結點。所有 View 都是相對HierarchyLayout的位置,通過getLocationInWindow獲取相對 Window 位置來決定 canvas需要平移的相對距離。
再結合手勢計算x 軸,y軸的旋轉度,通過canvas.rotate(x,y,0).
以上只是簡要的原理,具體還涉及隱藏下一層的 View,不然會畫重,詳細請看源碼 僅一個類。
最后感謝大家關注和多提建議或是issue,如果很感興趣請 star 和 follower . 完整工程地址 :
總結
以上是生活随笔為你收集整理的android层级关系图,画出 View 的层级 3D 图和树形图来分析层级关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NumberFormat 的使用
- 下一篇: 数据挖掘:数据仓库相关知识笔记