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 deonDraw()à 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 deonMeasure()etonLayout(), puisonDraw(). Utilisé si les dimensions ou la position de la vue changent (par exemple, lors de l'ajout/suppression d'éléments enfants dans unViewGroup).
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()