Open ivemmy opened 5 years ago
onMeasure是用于测量view的大小,但是你直接修改了,你想要这个view大小是如此,那你为何还要去重新测量呢? 你也说了是自定义View不是VIewGroup,所以你无需考虑重新计算它的子view的大小
作者的话其实存在误导,你看官方文档就清楚了:
CONTRACT: When overriding this method, you must call setMeasuredDimension(int, int) to store the measured width and height of this view. Failure to do so will trigger an IllegalStateException, thrown by measure(int, int). Calling the superclass' onMeasure(int, int) is a valid use.
当重写这个方法时,你必须调用
setMeasuredDimension(int, int)
来保存测量出来的宽和高,如果不调用那就会触发IllegalStateException
,直接调用父类的onMeasure(int, int)
是可以的。
请教一下,在安卓自定义View进阶-分类与流程中有一个,注意
如果对View的宽高进行修改了,不要调用 super.onMeasure( widthMeasureSpec, heightMeasureSpec); 要调用 setMeasuredDimension( widthsize, heightsize); 这个函数。
这是为什么?