linearlayoutを使用してondraw()を取得しないカスタムウィジェット
-
28-09-2019 - |
質問
拡張してカスタムウィジェットを作成しています 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ツールキットに描画したいことを伝えます。
所属していません StackOverflow