Sobes.tech
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 von onDraw() in der Zukunft. Das Neuzeichnen erfolgt im Haupt-Thread. Wird verwendet, wenn sich externe Eigenschaften der View (Farbe, Hintergrund usw.) ändern.
  • postInvalidate(): Ähnlich wie invalidate(), 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 von onMeasure() und onLayout(), gefolgt von onDraw(). Wird verwendet, wenn sich die Maße oder die Position der View ändern (z.B. beim Hinzufügen/Entfernen von Kind-Elementen in einem ViewGroup).

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()