
自定义控件的时候怎么获得宽高
1个回答
推荐于2016-06-17
展开全部
如果是ViewGroup控件,就递归计算子控件的大小,把所有子控件的值相加。
如果是是View,这个取决于你的onMeasure(int width,int height)方法,其里面有个setMeasuredDimension(int width,int height)就是最终定下大小的方法,在调用这个方法前,View会调用getDefaultSize(int size ,int widthMeasureSpec);它会根据父控件给与的空间 和自身需要最小控件的值比较选取最小的, 只是View是默认的方法,也就是 你给它多少 它就要多少,它不会说wrap_content就会出个值,你给他300,他就300,你给他wrap_content,因为在relativeLayout所以空间充足,其大小直接是屏幕的width。
你重写View时,可以在onMeasure()中
记录 this.getMeasuredWidth()和this.getMeasuredHeight()2个值,
如果你要画一张填满的图
要么用ImageView scaleType为FIT_XY
或者自定义的:
src=new Rect(0,0,bmp.getWidth(),bmp.getHeight());
dst=new Rect(0,0,this.getMeasuredWidth(),this.getMeasuredHeight());
自定View就是用canvas.drawBitmap(bmp,src,dst,null);
如果是是View,这个取决于你的onMeasure(int width,int height)方法,其里面有个setMeasuredDimension(int width,int height)就是最终定下大小的方法,在调用这个方法前,View会调用getDefaultSize(int size ,int widthMeasureSpec);它会根据父控件给与的空间 和自身需要最小控件的值比较选取最小的, 只是View是默认的方法,也就是 你给它多少 它就要多少,它不会说wrap_content就会出个值,你给他300,他就300,你给他wrap_content,因为在relativeLayout所以空间充足,其大小直接是屏幕的width。
你重写View时,可以在onMeasure()中
记录 this.getMeasuredWidth()和this.getMeasuredHeight()2个值,
如果你要画一张填满的图
要么用ImageView scaleType为FIT_XY
或者自定义的:
src=new Rect(0,0,bmp.getWidth(),bmp.getHeight());
dst=new Rect(0,0,this.getMeasuredWidth(),this.getMeasuredHeight());
自定View就是用canvas.drawBitmap(bmp,src,dst,null);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询