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には存在しません。