Sobes.tech
Middle

Parlez-moi des méthodes qui redessinent la vue.

sobes.tech IA

Réponse de l'IA

Méthodes:

  • invalidate(): Marque la vue como "sale", nécessitant une nouvelle dessin. Planifie l'exécution de onDraw() à l'avenir. La redessinée se produit dans le thread principal. Utilisé si les propriétés externes de la vue changent (couleur, fond, etc.).
  • postInvalidate(): Similaire à invalidate(), mais peut être appelé depuis n'importe quel thread, pas seulement le principal. Sûr à utiliser dans les threads en arrière-plan.
  • requestLayout(): Marque la vue comme "invalide", nécessitant de recalculer sa taille et sa position. Planifie l'exécution de onMeasure() et onLayout(), puis onDraw(). Utilisé si les dimensions ou la position de la vue changent (par exemple, lors de l'ajout/suppression d'éléments enfants dans un ViewGroup).

Comparaison des méthodes:

Méthode Thread d'appel Recalculer layout Redessiner
invalidate() Thread UI Non Oui
postInvalidate() Tout thread Non Oui
requestLayout() Thread UI Oui Oui (après layout)

Exemple d'utilisation de invalidate():

// Changer la couleur de la vue et demander un redessin
myView.setBackgroundColor(Color.RED)
myView.invalidate()

Exemple d'utilisation de requestLayout():

// Ajouter un élément enfant dans LinearLayout et demander le recalcul du layout et le redessin
val newTextView = TextView(context)
linearLayout.addView(newTextView)
linearLayout.requestLayout()