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é?


¿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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.