Sobes.tech
Middle

Parlami dei metodi che ridisegnano la vista.

sobes.tech AI

Risposta dell'AI

Metodi:

  • invalidate(): Segna la View come "sporca", richiedendo una ridisegnatura. Pianifica l'esecuzione di onDraw() in futuro. La ridisegnatura avviene nel thread principale. Usato se cambiano le proprietà esterne della View (colore, sfondo, ecc.).
  • postInvalidate(): Simile a invalidate(), ma può essere chiamato da qualsiasi thread, non solo da quello principale. Sicuro da usare nei thread in background.
  • requestLayout(): Segna la View come "non valida", richiedendo il ricalcolo delle sue dimensioni e posizione. Pianifica l'esecuzione di onMeasure() e onLayout(), poi onDraw(). Usato se cambiano le dimensioni o la posizione della View (ad esempio, aggiunta/rimozione di elementi figli in un ViewGroup).

Confronto tra metodi:

Metodo Thread di chiamata Ricalcolo layout Ridisegno
invalidate() Thread UI No
postInvalidate() Qualsiasi thread No
requestLayout() Thread UI Sì (dopo layout)

Esempio di utilizzo di invalidate():

// Cambia colore della View e richiedi ridisegno
myView.setBackgroundColor(Color.RED)
myView.invalidate()

Esempio di utilizzo di requestLayout():

// Aggiungi un elemento figlio a LinearLayout e richiedi il ricalcolo del layout e il ridisegno
val newTextView = TextView(context)
linearLayout.addView(newTextView)
linearLayout.requestLayout()