我在自定義佈局中面臨一個問題,這是LinearLayout的擴展。我想要實現的是在佈局的畫布上繪製一些形狀。dispatchDraw中的自定義佈局的畫布大小
所以我做了這樣的事情:
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(或可能是蜂窩前),畫布似乎是整個屏幕的大小,而不是佈局應繪製的部分。所以我的圖畫最終在錯誤的地方。
例如,在一個HTC渴望從上方輸出的日誌是:
canvas.width: 480
canvas.height: 800
鑑於高度應小,因爲有上面和下面的佈局的其他元件。
這個問題在ICS上不存在,我得到一個與我的佈局完全相同的畫布。
其實它似乎有點複雜。在初始dispatchDraw()調用我得到正確的帆布尺寸: 帆布寬度:480個 \t \t帆布高度:690 但立即有如下具有畫布設置爲480×800的第二dispatchDraw()調用。 – neptoon 2012-07-23 11:35:53
好吧,690似乎是沒有狀態欄的完整顯示大小。所以它仍然不是佈局的正確高度。 – neptoon 2012-07-23 11:55:17
好吧,我剛剛發現我應該使用getMeasuredWidth()和getMeasuredHeight(),它似乎可以在所有平臺版本上工作。 – neptoon 2012-07-23 14:01:26