Diseño propio definido, método onDraw () que no se llama

90

Definí una clase como esa:

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

y lo llamó como:

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

Pero, de hecho, la función TestMyFrameLayout.onDraw (Canvas canvas) no se llama, ¿por qué?

old_hou
fuente
¿Podrías mostrar el código donde lo usas? También agregue @Overrideantes de onDraw: esto buscará errores tipográficos en eclipse.
Laurent
3
Gracias Laurent '. Mi problema ya está resuelto. Agregue this.setWillNotDraw (false);
old_hou

Respuestas:

213

Resuelto. Agregar this.setWillNotDraw(false); constructor

old_hou
fuente
24
¡Solo podría haber sido un desarrollador angustiado quien lo configuró como verdadero por defecto!
Narcís Calvet
2
¿Por qué ayudaría esto?
RyanShao
5
@RyanShao para ViewGroups está establecido en verdadero de forma predeterminada.
ataulm
1
¿Por qué diablos alguien querrá que sea verdad? ¿¿por qué??
Kai Wang
Supongo que es una optimización para cuando un ViewGroup es un contenedor puro sin nada que dibujar por sí mismo
hmac