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

ディスパッチドローを使用する必要がありますか? 無効化を使用して、フレームワークにキャンバスのサイズを把握させてみませんか。

于 2012-07-23T12:23:53.597 に答える