Sobes.tech
Middle

Vertel me over de methoden die de View opnieuw tekenen.

sobes.tech AI

Antwoord van AI

Methoden:

  • invalidate(): Markeert de View als "vuil", waardoor opnieuw tekenen vereist is. Plant de uitvoering van onDraw() in de toekomst. Het opnieuw tekenen gebeurt in de hoofdthread. Wordt gebruikt als externe eigenschappen van de View (kleur, achtergrond, etc.) veranderen.
  • postInvalidate(): Vergelijkbaar met invalidate(), maar kan van elke thread worden aangeroepen, niet alleen van de hoofdthread. Veilig te gebruiken in achtergrondthreads.
  • requestLayout(): Markeert de View als "ongeldig", waardoor de grootte en positie opnieuw moeten worden berekend. Plant de uitvoering van onMeasure() en onLayout(), gevolgd door onDraw(). Wordt gebruikt als de afmetingen of positie van de View veranderen (bijvoorbeeld bij het toevoegen/verwijderen van kindelementen in een ViewGroup).

Vergelijking van methoden:

Methode Aanroepthread Layout-herberekening Opnieuw tekenen
invalidate() UI-thread Nee Ja
postInvalidate() Elke thread Nee Ja
requestLayout() UI-thread Ja Ja (na layout)

Voorbeeld van gebruik van invalidate():

// Verander de kleur van de View en vraag om opnieuw tekenen
myView.setBackgroundColor(Color.RED)
myView.invalidate()

Voorbeeld van gebruik van requestLayout():

// Voeg een kindelement toe aan LinearLayout en vraag om layout-herberekening en opnieuw tekenen
val newTextView = TextView(context)
linearLayout.addView(newTextView)
linearLayout.requestLayout()