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 vanonDraw()in de toekomst. Het opnieuw tekenen gebeurt in de hoofdthread. Wordt gebruikt als externe eigenschappen van de View (kleur, achtergrond, etc.) veranderen.postInvalidate(): Vergelijkbaar metinvalidate(), 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 vanonMeasure()enonLayout(), gevolgd dooronDraw(). Wordt gebruikt als de afmetingen of positie van de View veranderen (bijvoorbeeld bij het toevoegen/verwijderen van kindelementen in eenViewGroup).
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()