Middle
Povedz mi o metódach, ktoré prekresľujú View.
sobes.tech AI
Odpoveď od AI
Metódy:
invalidate(): Označuje View ako je "zašlá", čo vyžaduje jej opätovné vykreslenie. Plánuje vykonanieonDraw()v budúcnosti. Opätovné vykreslenie prebieha v hlavnom vlákne. Používa sa, ak sa zmenia vonkajšie vlastnosti View (farba, pozadie atď.).postInvalidate(): Podobne akoinvalidate(), ale môže byť volané z akéhokoľvek vlákna, nie len z hlavného. Bezpečné na použitie vo vláknach na pozadí.requestLayout(): Označuje View ako "neplatné", čo vyžaduje prepočet jeho veľkosti a pozície. Plánuje vykonanieonMeasure()aonLayout(), následneonDraw(). Používa sa, ak sa zmenia rozmery alebo pozícia View (napríklad pri pridávaní/odstraňovaní detí vViewGroup).
Porovnanie metód:
| Metóda | Volajúce vlákno | Prepočet layoutu | Opätovné vykreslenie |
|---|---|---|---|
invalidate() |
UI vlákno | Nie | Áno |
postInvalidate() |
Akékoľvek vlákno | Nie | Áno |
requestLayout() |
UI vlákno | Áno | Áno (po layout) |
Príklad použitia invalidate():
// Zmena farby View a požiadanie o opätovné vykreslenie
myView.setBackgroundColor(Color.RED)
myView.invalidate()
Príklad použitia requestLayout():
// Pridanie dieťaťa do LinearLayout a požiadanie o prepočet layoutu a opätovné vykreslenie
val newTextView = TextView(context)
linearLayout.addView(newTextView)
linearLayout.requestLayout()