Benutzerdefinierte Widget mit Linearlayout nicht OnDraw bekommen ()
-
28-09-2019 - |
Frage
Ich bin ein benutzerdefiniertes Widget durch die Erweiterung LinearLayout
erstellen:
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.
}
}
kann ich Kinder hinzufügen, ganz gut, aber ich bin nie meine Gewohnheit onDraw()
immer genannt wird. dispatchDraw()
wird aufgerufen, aber das scheint eine andere Leinwand zu haben (die, die innerhalb der Polsterung ist. Ich muss auf die gesamte Layoutfläche ziehen). Gibt es eine Flagge, dass Bedürfnisse erhalten auf onDraw()
für das Layout genannt zu bekommen?
Lösung
Sie müssen setWillNotDraw(false)
in Ihrem Konstruktor aufzurufen.
Da standardmäßig ein Layout nicht zu ziehen braucht, so eine Optimierung nicht Anruf ist Methode zeichnen. Durch den Aufruf setWillNotDraw(false)
sagen Sie dem UI-Toolkit, das Sie zeichnen möchten.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow