android - tutorial - Widget personalizado utilizando LinearLayout que no se está ejecutando
programacion android pdf 2018 (1)
setWillNotDraw(false)
llamar a setWillNotDraw(false)
en su constructor.
Debido a que, por defecto, no es necesario dibujar un diseño, por lo que una optimización es no llamar es un método de dibujo. Al llamar a setWillNotDraw(false)
le dices al kit de herramientas de IU que deseas dibujar.
Estoy creando un widget personalizado extendiendo LinearLayout
:
public class MyWidget extends LinearLayout {
private static Paint PAINT = new Paint(Paint.ANTI_ALIAS_FLAG);
static {
PAINT.setColor(Color.RED);
}
public MyWidget(Context context) {
this(context, null);
}
public MyWidget(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(canvas.getWidth() / 2, canvas.getHeight()/2, canvas.getWidth()/2, PAINT);
// never gets called :-(
}
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
// this gets called, but with a canvas sized after the padding.
}
}
Puedo agregar niños muy bien, pero nunca estoy recibiendo mi onDraw()
personalizada a onDraw()
. dispatchDraw()
llama a dispatchDraw()
, pero parece que tiene un lienzo diferente (el que está dentro del relleno. Necesito dibujar en toda el área de diseño). ¿Hay algún indicador que deba configurarse para obtener onDraw()
llamado para el diseño?