这是一个棘手的问题:
我在写我的习惯ImageView
:
public class CustomImageView extends View
要显示的图片通过文件夹设置,setImagePath(String path)
并BitMap
从assets
文件夹中加载。一切正常,图像尺寸已验证。
在以后的过程中,将CustomImageView
-Object通过添加到LinearLayout
(匹配父对象)中addView(View v)
。覆盖方法
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom)
会被调用并计算一些无用的值,这时不重要。
奇怪的是,底值始终为零!我认为这就是为什么onDraw(Canvas c)
永远都不会被召唤的关键所在。
E/CIView﹕ onLayout - changed: true, left: 0, top: 0, right: 1080, bottom: 0
E/CIView﹕ bitmap - bitmapWidth: 735, bitmapHeight: 490
E/CIView﹕ onLayout - changed: false, left: 0, top: 0, right: 1080, bottom: 0
E/CIView﹕ bitmap - bitmapWidth: 735, bitmapHeight: 490
谁能向我解释为什么onLayout
永远得不到正确的底值?诸如此类的方法invalidate()
或requestLayout()
没有进行任何更改的方法,也许我错过了一些特殊的部分..?
如果覆盖View
,则需要提供其大小-这就是为什么高度边界为零的原因。因此onMeasure()
,在该调用内实施setMeasuredDimension()
。
例如
@Override protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
setMeasuredDimension(bitmapWidth, bitmapHeight); }
虽然您应该使用以下方法检查是否有足够的空间
MeasureSpec.getSize(widthMeasureSpec)
和
MeasureSpec.getSize(heightMeasureSpec)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句