Widget personalizado utilizando LinearLayout no conseguir onDraw ()
-
28-09-2019 - |
Pregunta
Estoy creando un widget personalizado por LinearLayout
extendiéndose:
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 añadir los niños muy bien, pero nunca recibo mi onDraw()
a medida que se llama. dispatchDraw()
se llama, pero que parece tener un lienzo diferente (la que está dentro del relleno. Tengo que recurrir a toda el área de diseño). ¿Hay algún indicador de que las necesidades para ponerse en conseguir onDraw()
llamada para el diseño?
Solución
Es necesario llamar setWillNotDraw(false)
en su constructor.
Debido a que por defecto un diseño no necesita dibujar, por lo que una optimización es no llamada es dibujar método. Llamando setWillNotDraw(false)
le dice al kit de herramientas de interfaz de usuario que desea dibujar.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow