Middle
Cuéntame sobre los métodos que redibujan la vista.
sobes.tech AI
Respuesta de la IA
Métodos:
invalidate(): Marca la vista como "sucia", requiriendo volver a dibujarla. Programa la ejecución deonDraw()en el futuro. La redibujada ocurre en el hilo principal. Se usa si cambian las propiedades externas de la vista (color, fondo, etc.).postInvalidate(): Similar ainvalidate(), pero puede ser llamado desde cualquier hilo, no solo desde el principal. Seguro para usar en hilos en segundo plano.requestLayout(): Marca la vista como "inválida", requiriendo recalcular su tamaño y posición. Programa la ejecución deonMeasure()yonLayout(), y luegoonDraw(). Se usa si cambian las dimensiones o la posición de la vista (por ejemplo, al añadir/eliminar elementos hijos en unViewGroup).
Comparación de métodos:
| Método | Hilo de llamada | Recalcular layout | Redibujar |
|---|---|---|---|
invalidate() |
Hilo UI | No | Sí |
postInvalidate() |
Cualquier hilo | No | Sí |
requestLayout() |
Hilo UI | Sí | Sí (después de layout) |
Ejemplo de uso de invalidate():
// Cambiar el color de la vista y solicitar redibujo
myView.setBackgroundColor(Color.RED)
myView.invalidate()
Ejemplo de uso de requestLayout():
// Añadir un elemento hijo en LinearLayout y solicitar recalcular layout y redibujo
val newTextView = TextView(context)
linearLayout.addView(newTextView)
linearLayout.requestLayout()