Sobes.tech
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ě jako invalidate(), 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() a onLayout(), 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í v ViewGroup).

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