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?


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.