Middle
Реци ми о методама који поново цртају View.
sobes.tech АИ
Одговор од АИ
Методе:
invalidate(): označava View kao "prljav", što zahteva ponovno crtanje. Planira izvršenjeonDraw()u budućnosti. Ponovno crtanje se dešava u glavnom thread-u. Koristi se ako se spoljašnja svojstva View-a (boja, pozadina itd.) promene.postInvalidate(): Sličnoinvalidate(), ali može biti pozvano iz bilo kojeg thread-a, ne samo iz glavnog. Sigurno za korišćenje u pozadinskim thread-ovima.requestLayout(): označava View kao "nevažeći", što zahteva ponovno računanje njegove veličine i pozicije. Planira izvršenjeonMeasure()ionLayout(), zatimonDraw(). Koristi se ako se dimenzije ili pozicija View-a promene (npr. pri dodavanju/uklanjanju dece uViewGroup).
Poređenje metoda:
| Metod | Thread poziva | Ponovno računanje layout-a | Ponovno crtanje |
|---|---|---|---|
invalidate() |
UI thread | Ne | Da |
postInvalidate() |
Bilo koji thread | Ne | Da |
requestLayout() |
UI thread | Da | Da (nakon layout-a) |
Primer korišćenja invalidate():
// Promena boje View-a i zahtev za ponovnim crtanjem
myView.setBackgroundColor(Color.RED)
myView.invalidate()
Primer korišćenja requestLayout():
// Dodavanje deteta u LinearLayout i zahtev za ponovnim računom layout-a i crtanjem
val newTextView = TextView(context)
linearLayout.addView(newTextView)
linearLayout.requestLayout()