0

我在自定义布局中遇到问题,这是 LinearLayout 的扩展。我想要实现的只是在布局的画布上绘制一些形状。

因此我做了这样的事情:

public class MyLayout extends LinearLayout {

    @Override
    protected void dispatchDraw(Canvas canvas) {
        super.dispatchDraw(canvas);

        int width = canvas.getWidth();
        int height = canvas.getHeight();

        Log.d(TAG, "canvas width: " + width);
        Log.d(TAG, "canvas height: " + height);

        // do some drawing on the canvas ...
    }
}

我省略了我进行实际绘图的部分,因为我猜它与我的问题无关。

我的问题是,在 ICS 之前(或者可能是 Honeycomb 之前),画布似乎是整个屏幕的大小,而不仅仅是应该绘制布局的部分。因此,我的图纸最终出现在错误的地方。

例如,在 HTC Desire 上,上面的日志输出为:

canvas.width: 480
canvas.height: 800

而高度应该更小,因为布局上方和下方还有其他元素。

ICS 上不存在此问题,我得到的画布与我的布局大小完全相同。

4

1 回答 1

0

你必须使用调度抽奖吗?为什么不使用 invalidate 并让框架计算出画布大小。

于 2012-07-23T12:23:53.597 回答