美文网首页Android开发经验谈Android知识Android开发
画出 View 的层级 3D 图和树形图来分析层级关系

画出 View 的层级 3D 图和树形图来分析层级关系

作者: rexyren | 来源:发表于2017-07-10 11:36 被阅读1187次

HierarchyLayout 介绍

HierarchyLayout是一个自定义的ViewGroup工具,用于分析视图的层级关系,并画出层级树的结构图和可交互的3D 层级View:

HiearchyLayout的静态图,实际是可随手势改变 3D 形态的。

hierarchyView.jpeg hierarchyViewNode.jpeg hierarchyNode.jpeg

查看工程地址 github 点我更多经典自定义 ViewGroup集合

使用方法

HierarchyLayout 只有一个文件,使用很简便,只需要把它当作一个普通的LinearLayout根布局就可以。可用 xml 根布局,也可用new 构造动态添加都行。
例如 Activity 或 Fragment 的根布局使用:

<?xml version="1.0" encoding="utf-8"?>
<com.rexy.widgets.group.HierarchyLayout
    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 .
</com.rexy.widgets.group.HierarchyLayout>

运行后就会出现一个层级分析界面,顶部是概要信息,层级显示最大层级数,和平均层级数,结点显示所有的结点总数和 ViewGroup 型及 View 型的数目,测绘显示的是最近一次measure layout draw 的时间。

注意 HierarchyLayout 只能分析出它自身结点及其包含的直接或间接子结点的层级关系,若将它安装在 Activity 的DecorView下就可分析出整个 Window 的层级信息。

实现原理分三部

  1. 作为根布局在onLayout 后 立即递归分析所有包含的子View信息,如结点类型,相对HierarchyLayout的层数,位置,父亲和孩子等依赖关系 并构造一个完整的树结构记录。
  2. 画树需要根据每层所在位置和叶子数计算权重 来决定每个结点在视图上画出的位置坐标并画圆,每个结点连接父结点画线就构成树。
  3. 画3D层级图形就是在第一部基础上,一层一层的计算偏移量并用view.draw(canvas)来画某一个结点。所有 View 都是相对HierarchyLayout的位置,通过getLocationInWindow获取相对 Window 位置来决定 canvas需要平移的相对距离。
    再结合手势计算x 轴,y轴的旋转度,通过canvas.rotate(x,y,0).

以上只是简要的原理,具体还涉及隐藏下一层的 View,不然会画重,详细请看源码 仅一个类。

最后感谢大家关注和多提建议或是issue,如果很感兴趣请 star 和 follower . 完整工程地址更多经典自定义 ViewGroup集合

相关文章

网友评论

    本文标题:画出 View 的层级 3D 图和树形图来分析层级关系

    本文链接:https://www.haomeiwen.com/subject/akuyhxtx.html