Android getWidth()在View的#Draw中返回0

时间:2015-02-24 15:47:39

标签: android

这是我的代码:

    if (myView == null) {
        myView = new View(mContext) {
            @Override
            protected void onDraw(final Canvas canvas) {
                super.onDraw(canvas);
                final float width = (float)getWidth();
                ......
            }
        };

        addView(myView);
    }

    requestLayout();

虽然mContext的大小不为零,但我的代码中的宽度始终为0。任何人都可以建议我得到宽度为0的可能原因是什么?感谢

3 个答案:

答案 0 :(得分:1)

您必须在onSizeChanged处理程序中记录画布的尺寸,然后在onDraw处理程序中使用它们。

private int canvasWidth;
private int canvasHeight;

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    canvasWidth = w;
    canvasHeight = h;
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    final float width = (float)canvasWidth;
    ...
}

答案 1 :(得分:0)

作为一名新手,我认为你的新观点是空白的,因为它的宽度和高度都是0。 也许你应该尝试设置它的布局参数,给出一些硬编码的高度和宽度。

目前onmeasure没有什么可衡量的。 也许吧 。 :P

答案 2 :(得分:0)

尝试从画布获取宽度和高度

@Override
protected void onDraw(Canvas canvas) {
    mScrWidth = canvas.getWidth();
    mScrHeight = canvas.getHeight();
    [...]
}