View 的三大流程:测量、布局、绘制,我想大家应该都烂熟于心。
而在绘制阶段,ViewGroup 不光要绘制自身,还需循环绘制其一众子 View,这个绘制策略默认为顺序绘制,即 [0 ~ childCount)。
这个默认的策略,有办法调整吗?
例如修改成 (childCount ~ 0],或是修成某个 View 最后绘制。同时又有什么场景需要我们做这样的修改?
问题来了:
- 这个默认的策略,有办法调整吗?
- 修改了之后,事件分发需要特殊处理吗?还是需要特殊处理。
本题引用自「承香墨影的公众号」。
更多问答 >>
-
每日一问 | apply plugin: 'com.android.application' 背后发生了什么?
2020-08-16 19:56 -
2020-08-23 23:54
-
2020-08-26 21:11
-
2020-09-09 23:54
-
2020-10-03 11:43
-
每日一问 | 比 removeView 更轻量的操作,你了解过吗?
2020-07-27 01:14 -
每日一问 | RecyclerView的多级缓存机制,每级缓存到底起到什么样的作用?
2020-07-19 23:56 -
2020-07-08 23:05
-
每日一问 | Android P 上,需要配置 network_security_config ,才能抓包,正确吗?
2020-06-29 21:26 -
每日一问 | 曾经的记忆中“onSaveInstanceState 会在系统意外杀死 Activity 时调用”,正确吗?
2020-07-12 23:49
既然公众号已经有详细介绍,这里就不多说了。
其实,这个问题跟去年的一个问题非常相似,甚至实现方式都是一样的:每日一问 事件分发机制大家应该都熟记于心,默认事件分发是逆序的,有哪些方法可以修改分发顺序?只是当时是问的事件分发,现在是问绘制。补充一下第二问: 子View绘制顺序更改之后,事件分发需要手动做相应处理吗?
不需要。因为ViewGroup在dispatchTouchEvent
中遍历子View的时候,同样会通过getChildDrawingOrder
方法来获取当前索引所对应的子View索引。也就是说,事件分发的顺序和子View的绘制顺序,是对应的。最后要注意的是:
自定义DrawingOrder,只是改变事件分发和子View绘制的顺序,ViewGroup内部mChildren
数组的排序是不会变的,所以不要认为通过修改DrawingOrder也能同时改变getChildAt
方法返回的View对象。赞~
陈小缘大佬有没有公众号呀,目前只看到有博客
问一个,那个子 `View` 的 `getZ()` 获取的值对于绘制顺序有没有影响?
有
我是弟弟,不配拥有公众号
看情况,如果硬件加速没有关闭的话,就不会影响。否则,会使自定义DrawingOrder直接失效
一般修改绘制顺序的情况,我们是用到电视开发上的,因为需要上焦点放大,就会被遮挡,所以需要修改回执顺序,让上焦的View绘制在第一个:
这个问题,正好让我想起 前段时间,我想的一个问题。项目中真实遇到的。
一个viewGroup 绘制了4-5个view,当其中一个子view。例如背景变了。就会导致整个viewGroup的刷新。。请问有没有办法?仅仅只让对应的view更改UI。避免让viewGroup重新测量 绘制