文章目录
一、getWidth和getMeasuredWidth的区别
view的绘制分为三个过程:mesure,layout,draw;
getMeasuredWidth和getMeasuredHeight在mesure结束后就可以获取到,值是由测量过程中setMeasuredDimension设置
getWidth方法在layout结束后才能获取到
getWidth:得到view的实际尺寸(view在父Layout中布局好后的宽度)
getMeasuredWidth:得到view想要在父view中占的尺寸(最近一次调用measure()方法测量后得到的view的宽度,它仅仅用在测量和layout的计算中)
两个方法所得结果单位都是像素即pixel
二、getWidth=0
在onCreate()方法中调用view的getWidth(),getHeight(),getMeasuredWidth(),getMeasuredHeight(),getTop(),getLeft()等方法获取到的都是0;
原因:view组件布局是在onResume回调后完成,onCreate()时view还未被度量measure
解决方案:
1、监听Draw/Layout事件:ViewTreeObserver
①OnGlobalLayoutListener
ViewTreeObserver vto = imageView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
imageView.getViewTreeObserver().removeGlobalOnLayoutListener(