我在自定义布局中遇到问题,这是 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 上不存在此问题,我得到的画布与我的布局大小完全相同。