Sobes.tech
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 vykonanie onDraw() 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 ako invalidate(), 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 vykonanie onMeasure() a onLayout(), následne onDraw(). Používa sa, ak sa zmenia rozmery alebo pozícia View (napríklad pri pridávaní/odstraňovaní detí v ViewGroup).

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