質問

拡張してカスタムウィジェットを作成しています LinearLayout:

public class MyWidget extends LinearLayout {
    private static Paint PAINT = new Paint(Paint.ANTI_ALIAS_FLAG);
    static {
        PAINT.setColor(Color.RED);
    }

    public MyWidget(Context context) {
        this(context, null);
    }

    public MyWidget(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(canvas.getWidth() / 2, canvas.getHeight()/2, canvas.getWidth()/2, PAINT);
        // never gets called :-(
    }

    @Override
    protected void dispatchDraw(Canvas canvas) {
        super.dispatchDraw(canvas);
        // this gets called, but with a canvas sized after the padding.
    }
}

私は子供たちをうまく追加することができますが、私は自分の習慣を得ることはありません onDraw() 呼ばれる。 dispatchDraw() 呼び出されますが、それは別のキャンバス(パディング内にあるものです。レイアウト領域全体を描く必要があります)があります。取得するために設定する必要があるフラグはありますか onDraw() レイアウトを求めましたか?

役に立ちましたか?

解決

あなたは電話する必要があります setWillNotDraw(false) コンストラクターで。

デフォルトではレイアウトを描画する必要がないため、最適化は呼び出さないことです。電話することによって setWillNotDraw(false) UIツールキットに描画したいことを伝えます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top