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

HierarchyLayout 介绍

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

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

a2e21b3fa59a

hierarchyView.jpeg

a2e21b3fa59a

hierarchyViewNode.jpeg

a2e21b3fa59a

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 . 完整工程地址 :

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/408807.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

换个角度看GAN:另一种损失函数

转载自:机器之心选自Medium作者:Phc L机器之心编译参与:张玺「本质上,GAN 就是另一种。」Jeremy Howardf 老师曾在(GAN)课程中说过:「……本质上,GAN 就是另一种损失函数。」本文将在…

程序员的数学笔记2--余数

上一节程序员的数学笔记1–进制转换是介绍了进制,特别是十进制和二进制之间的转换,移位操作和逻辑操作。 今天介绍的是余数,看完本节笔记,你会发现生活中有很多东西都有余数的影子。 余数 余数的特性 整数是没有边界的&#xf…

机器学习入门系列(1)--机器学习概览

本文比较长,八千字,建议收藏起来慢慢看!此外,这其实是合并公众号最开始写的两篇文章,整合在一起了。机器学习入门系列(1)--机器学习概览(上)机器学习入门系列(2)--机器学习概览(下)主要参考《hands-on-ml-with-sklearn…

[bbk5307]第76集 第9章 -数据库性能维护 03

/* Oracle optimizer 执行选择方式原理分析 */ select * from emp where empno7369; oracle在执行查询计划的时候,并不是说要执行一次全表扫描和一次索引扫描之后,来决定到底是走哪一条路?而是通过数据字典里的统计数据信息,来分析判断到底是…

[资源]推荐一些Python书籍和教程,入门和进阶的都有!

前几天后台有读者留言说希望推荐一些入门的书籍,所以这几天都在整理一些我入门时候学习过的书籍教程,或者是口碑还不错的书籍!入门和进阶书籍教程入门和进阶方面的书籍教程,这里推荐两本书和一个教程。1. 廖雪峰老师的 Python 教程…

html 状态栏不显示文字,电脑打字的时候输入法不显示状态栏怎么办?

有时我们在打字的时候,输入法不显示,能打出汉字,但无法选字,这就给输入字体造成了很大的麻烦。怎么解决呢?下面以搜狗输入法为例,描述详细解决过程。解决方法一1、我在某个网页输入字体的时候,没…

系统在iis6上部署

1. 安装Framework 4.0 服务器安装Framework4.0版本。 2. 安装IIS 2.1 安装IIS6.0步骤 1) 在添加或删除程序,单击“添加/删除Windows组件”。 2) 勾选“应用程序服务器”,并单击“详细信息”。 3) 勾选“ASP.NET/IIS/启用网络COM访问/启用网络DTC访问”信…

[Github 项目推荐] 一个更好阅读和查找论文的网站

第 28 篇原创文章机器学习发展到现在,已经积累了非常多的文章,特别是深度学习火起来后,每年新增加的论文非常多,如果需要研究某个领域,不仅需要阅读这个领域经典的论文,也必须时刻关注最新的学术进展&#…

html下拉选择框箭头改为年,CSS自定义select下拉选择框的样式(不用其他标签模拟)...

今天群里有人问到怎么自定义select下拉选择框的样式,于是群里就展开了激烈的讨论,刚开始一直就是考虑怎样使用纯CSS实现,把浏览器默认的样式覆盖掉,但最后均因兼容问题处理不好而失败告终,最后的解决方案就是用其他的元…

【语言处理与Python】10.1自然语言理解\10.2命题逻辑

10.1自然语言理解 查询数据库 如果有人提出一个问题: Which country is Athens in? 得到的回答应该是: Greece. 这个数据可以通过数据库语言得到答案: SELECT Country FROM city_table WHERE City athens 这里有一个文法,可以把句…

程序员的数学笔记3--迭代法

第三节课程,介绍的是迭代法。 前两节笔记的文章: 程序员的数学笔记1–进制转换程序员的数学笔记2–余数 03 迭代法 什么是迭代法 迭代法,简单来说,其实就是不断地用旧的变量值,递推计算新的变量值。 这里采用一个…

机器学习入门系列(2)--如何构建一个完整的机器学习项目(一)

上一篇机器学习入门系列(1)–机器学习概览简单介绍了机器学习的一些基本概念,包括定义、优缺点、机器学习任务的划分等等。 接下来计划通过几篇文章来介绍下,一个完整的机器学习项目的实现步骤会分为几步,最后会结合《…