CustomView的“ onDraw()”方法永远不会被调用

JU5T1C3

这是一个棘手的问题:

我在写我的习惯ImageView

public class CustomImageView extends View

要显示的图片通过文件夹设置,setImagePath(String path)BitMapassets文件夹中加载一切正常,图像尺寸已验证。

在以后的过程中,将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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章