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.