Layout definito proprio, metodo onDraw () non richiamato


90

Ho definito una classe come quella :

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);
    }   
}

e l'ho chiamato come:

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

Ma in realtà la funzione TestMyFrameLayout.onDraw (Canvas canvas) non viene chiamata, perché?


Potresti mostrare il codice dove lo usi? Aggiungi anche @Overrideprima di onDraw: questo controllerà gli errori di battitura in eclipse.
Laurent '16

3
Grazie Laurent '. Il mio problema è già risolto. Aggiungi this.setWillNotDraw (false);
old_hou

Risposte:


211

Risolto. Aggiungi this.setWillNotDraw(false); costruttore


24
Potrebbe essere stato solo uno sviluppatore angosciato che lo ha impostato su true per impostazione predefinita!
Narcís Calvet

2
perché questo aiuto?
RyanShao

5
@RyanShao per ViewGroups è impostato su true per impostazione predefinita.
ataulm

1
perché diavolo qualcuno vorrà che sia vero? perché??
Kai Wang

Immagino sia un'ottimizzazione per quando un ViewGroup è un contenitore puro senza nulla da disegnare per se stesso
hmac
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.