正常情况使用getMeasuredHeight()与getHeight()或getMeasuredWidth()与getWidth()得到的值是相同的.
- getMeasuredHeight()和getMeasuredWidth()得到的值是在自定义控件重写onMeasure(int widthMeasureSpec, int heightMeasureSpec)方法时,调用setMeasuredDimension(int measuredWidth, int measuredHeight)设置的值.如果此处不调用setMeasuredDimension()方法,直接调用super.onMeasure(widthMeasureSpec, widthMeasureSpec),你使用getMeasuredHeight()和getMeasuredWidth()得到的值都是0;
- getHeight()和getWidth()得到的值是我们调用onLayout()方法传进去的四个参数.
总结
①getMeasuredWidth方法获得的值是setMeasuredDimension方法设置的值,它的值在measure方法运行后就会确定
②getWidth方法获得是layout方法中传递的四个参数中的mRight-mLeft,它的值是在layout方法运行后确定的
③一般情况下在onLayout方法中使用getMeasuredWidth方法,而在除onLayout方法之外的地方用getWidth方法。
实际测试用例可以参考:https://blog.csdn.net/dmk877/article/details/49734869