Middle
Pověz mi o metodách, které překreslují View.
sobes.tech AI
Odpověď od AI
Metody:
invalidate(): Označuje View jako "zašlou", což vyžaduje překreslení. Plánuje provedeníonDraw()v budoucnu. Překreslení probíhá v hlavním vlákně. Používá se, pokud se změní vnější vlastnosti View (barva, pozadí atd.).postInvalidate(): Podobně jakoinvalidate(), ale může být voláno z jakéhokoliv vlákna, nikoliv pouze z hlavního. Bezpečné pro použití ve vláknách na pozadí.requestLayout(): Označuje View jako "neplatné", což vyžaduje přepočet jeho velikosti a pozice. Plánuje provedeníonMeasure()aonLayout(), následovanéonDraw(). Používá se, pokud se změní rozměry nebo pozice View (například při přidání/odebrání dětí vViewGroup).
Porovnání metod:
| Metoda | Volající vlákno | Přepočet rozvržení | Překreslení |
|---|---|---|---|
invalidate() |
UI vlákno | Ne | Ano |
postInvalidate() |
Jakékoliv vlákno | Ne | Ano |
requestLayout() |
UI vlákno | Ano | Ano (po rozvržení) |
Příklad použití invalidate():
// Změna barvy View a požadavek na překreslení
myView.setBackgroundColor(Color.RED)
myView.invalidate()
Příklad použití requestLayout():
// Přidání dítěte do LinearLayout a požadavek na přepočet rozvržení a překreslení
val newTextView = TextView(context)
linearLayout.addView(newTextView)
linearLayout.requestLayout()