Middle
Erzählen Sie mir von den Methoden, die die View neu zeichnen.
sobes.tech KI
Antwort von AI
Methoden:
invalidate(): Markiert die View als "schmutzig", was ein Neuzeichnen erfordert. Plant die Ausführung vononDraw()in der Zukunft. Das Neuzeichnen erfolgt im Haupt-Thread. Wird verwendet, wenn sich externe Eigenschaften der View (Farbe, Hintergrund usw.) ändern.postInvalidate(): Ähnlich wieinvalidate(), kann aber aus jedem Thread aufgerufen werden, nicht nur aus dem Haupt-Thread. Sicher in Hintergrund-Threads verwendbar.requestLayout(): Markiert die View als "ungültig", was eine Neuberechnung ihrer Größe und Position erfordert. Plant die Ausführung vononMeasure()undonLayout(), gefolgt vononDraw(). Wird verwendet, wenn sich die Maße oder die Position der View ändern (z.B. beim Hinzufügen/Entfernen von Kind-Elementen in einemViewGroup).
Vergleich der Methoden:
| Methode | Aufruf-Thread | Layout-Neuberechnung | Neuzeichnen |
|---|---|---|---|
invalidate() |
UI-Thread | Nein | Ja |
postInvalidate() |
Beliebiger Thread | Nein | Ja |
requestLayout() |
UI-Thread | Ja | Ja (nach Layout) |
Beispiel für invalidate():
// Ändern der Farbe der View und Anforderung des Neuzeichnens
myView.setBackgroundColor(Color.RED)
myView.invalidate()
Beispiel für requestLayout():
// Hinzufügen eines Kind-Elements zu LinearLayout und Anforderung der Neuberechnung des Layouts und Neuzeichnens
val newTextView = TextView(context)
linearLayout.addView(newTextView)
linearLayout.requestLayout()