Eigenes definiertes Layout, onDraw () -Methode wird nicht aufgerufen

90

Ich habe eine Klasse wie diese definiert:

public class TestMyFrameLayout extends FrameLayout{

    Paint mPaint;
    public TestMyFrameLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public TestMyFrameLayout(Context context) {
        super(context);
        mPaint = new Paint();
        mPaint.setColor(Color.GREEN);
    }

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(50f, 50f, 30, mPaint);
    }   
}

und nannte es wie:

TestMyFrameLayout myFrameLayout = new TestMyFrameLayout(this);
LayoutParams myFrameLayoutParams = new LayoutParams(300,300);
myFrameLayout.setLayoutParams(myFrameLayoutParams);
setContentView(myFrameLayout);

Tatsächlich wird die Funktion TestMyFrameLayout.onDraw (Canvas Canvas) nicht aufgerufen. Warum?

old_hou
quelle
Können Sie dem Code zeigen, wo Sie ihn verwenden? @OverrideFügen Sie auch vor onDraw hinzu: Dadurch wird in Eclipse nach Tippfehlern gesucht.
Laurent
3
Danke Laurent '. Mein Problem ist bereits gelöst. Add this.setWillNotDraw (false);
old_hou

Antworten:

210

Gelöst. this.setWillNotDraw(false); Konstruktor hinzufügen

old_hou
quelle
24
Es konnte nur ein angsterfüllter Entwickler sein, der es standardmäßig auf true gesetzt hat!
Narcís Calvet
2
warum sollte das helfen?
RyanShao
5
@RyanShao für ViewGroups ist standardmäßig auf true gesetzt.
Ataulm
1
Warum zum Teufel will jemand, dass es wahr ist? Warum??
Kai Wang
Ich denke, es ist eine Optimierung, wenn eine ViewGroup ein reiner Container ist, für den es nichts zu zeichnen gibt
hmac