如何解决视图的依存关系和onMeasure的顺序
我正在制作自定义版式和一些自定义视图。 例如我有一个parentView容器(match_parent width,match_parent height) 然后它包含许多子视图,例如view1,view2,view3,view4,view5,view6。
我建立了视图对相同级别的其他视图的依赖。
view2 view1的顶部至底部底部+视图1的1/2高度
(即,mView of view2 = mBottom of view1 +(int)(1 / 2f * view1.getHeight()+ 0.5f)
view3 view2的顶部至底部底部+视图1的1/2高度
view4 leftToRightOf view1 + 1/2 view1 height
view4 TopToTopOf view3
在这种情况下,我可以说
view2,view4取决于view1
&view3取决于view2
&view4也取决于view3
即如果更改了view1的大小,我也需要同时更新view2,view3,view4。
因此,在setContent(main_layout.xml)之后, 如果我通过设置高度更改了view1的宽度, 我手动使用view1.requestLayout()和view.invalidate()。
view1.requestLayout将请求parentView.requestlayout()。
但是,有两个问题。
问题1:view1如何知道哪些视图依赖于view1本身?如我的示例所示,view3依赖于view2,因此依赖于view1并不十分直接。哪些代码可以控制view1激活view3.requestLayout()和view3.invalidate()?
Probelm2:即使我添加了一些代码来解决问题1,系统也会看到view1,view2,view3,view4的标志来执行onMeasure。问题是计算顺序。由于view2,view3,view4的某些顶部或左侧值取决于视图的右侧或底部值,因此我们需要view1首先完成onMeasure。然后执行view2的onMeasure,然后执行view3的onMeasure,然后执行view4的onMeasure。
这不是键入view1.requestLayout(),view2.requestLayout(),view3.requestLayout(),view4.requestLayout()的顺序。如何告诉系统排序顺序并节省内存,onMeasure下的视图链中的每个视图只执行一次onMeasure?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。