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.