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)
を呼び出す必要があります。
デフォルトでは、レイアウトは描画する必要がないため、最適化では、drawメソッドを呼び出さないようにします。 setWillNotDraw(false)
を呼び出すことにより、描画するUIツールキットを指定します。