sloop
sloop
看原理篇函数调用流程,有图。  如果ViewGroup不拦截,那么只有ChildView不消费,ViewGroup才会响应。
nextContour() 一段一段的测量,加起来就是总长度。
可以的,用自定义 ViewGroup。
可以的,然后在自定义的Group中填充这个布局就行了。例如: ``` java public class TitleBar extends ConstraintLayout { private View mGroup; public TitleBar(Context context) { this(context, null); } public TitleBar(Context context, AttributeSet attrs) { this(context, attrs, 0); } public...
因为这个系列目前只更新了大约一半的内容,因为刚工作,时间不足暂时停更了一年,最近可能会恢复更新。
我可能没有理解你说的这个内容的应用场景。 如果是自己自定义View,测量阶段就可以拿到屏幕宽高、最大可用宽度,padding 等数值,根据这些数值自然就可以计算出所需的尺寸信息,然后直接通过相关的方法应用该宽度就可以了。没有必要计算出来后存储起来再拿来使用。 如果是官方控件的属性,定义为 wrap_content ,设置了 margin 后,它的最大宽度自然就被限制了。 如果是第三方控件,定义为 wrap_content ,设置了 margin 后,它的显示的最大宽度超出了可以用区域,说明这个控件本身就存在问题,没有按照官方的标准来执行,是控件自身的问题,建议自己进行修改调整,或者换一个其他的控件来代替,
 也就是说内容区域最大如红框所示的意思吧。 一般来说,1、2、3 都是设置的具体 dp 数值,那么 1 + 2 + 3 在最开始就是已知的,那么设置具体内容区域(蓝框所示)的时候直接设置 marginRight 的数值为 1 + 2 +3 的 dp 数值就可以了。
如果上层View是按照规范来的,是这样的。
MPERSP_0、MPERSP_1 分别表示X、Y方向上的透视,具体计算和齐次坐标系相关,可以自己看一下相关的内容。