Junior
Kaip iškviesti individualizuoto View perpiešimą Android?
sobes.tech AI
Atsakymas iš AI
Yra keletas būdų iškviesti perpiešimą (invalidate) pritaikytam View:
-
invalidate():
- Perpiešia visą View.
- Planuoja
onDraw()iškvietimą. - Naudojama paprastam perpiešimui be konkrečios srities nurodymo.
// Jūsų View viduje arba sąveikoje su juo myCustomView.invalidate() -
invalidate(Rect dirty) arba invalidate(int left, int top, int right, int bottom):
- Perpiešia tik nurodytą View sritį.
- Efektyviau, jei pakeitimai liečia tik dalį View.
// Perpiešti sritį su koordinatėmis (10, 20) iki (100, 150) myCustomView.invalidate(10, 20, 100, 150) // Arba naudojant Rect val dirtyRect = Rect(10, 20, 100, 150) myCustomView.invalidate(dirtyRect) -
postInvalidate():
- Saugu iškviesti iš bet kurios gijos, įskaitant fonines.
- Pateikia
invalidate()operaciją į žinučių eilę UI gijoje vykdymui.
// Iš foninės gijos iškvietimas Thread { // Ilgalaikiai skaičiavimai // ... myCustomView.postInvalidate() }.start()
Invalidate() ir postInvalidate() palyginimas:
| Metodas | Vykdymo gija | Saugu iš foninės gijos | Paskirtis |
|---|---|---|---|
invalidate() |
UI gija | Ne | Nedelsiant perpiešti (kiek įmanoma UI gijoje) |
postInvalidate() |
UI gija | Taip | Atidėtas perpiešimas, įdedant į žinučių eilę |
Ryšys su onDraw():
Kiekvienas invalidate(...) metodas planuoja onDraw() vykdymą jūsų View. Android sistema sujungia kelis invalidate užklausimus į vieną, jei įmanoma, optimizacijos tikslais. onDraw() iškviečiamas tik tada, kai sistema yra pasiruošusi perpiešti.
Kada naudoti kiekvieną metodą:
- Naudokite
invalidate(), kai esate UI gijoje (pavyzdžiui, paspaudimo apdorojimo metu, po animacijos) ir pakeitimai liečia visą View arba jums nesvarbi srities optimizacija. - Naudokite
invalidate(Rect)arbainvalidate(int, int, int, int)optimizacijai, jei pakeitimai liečia tik dalį View ir esate UI gijoje. - Naudokite
postInvalidate(), kai reikia iškviesti invalidate iš foninės gijos. - Nenaudokite per dažnai
invalidate()arpostInvalidate()be reikalo, nes tai gali neigiamai paveikti našumą. Juos iškvieskite tik po duomenų ar būsenos pakeitimo, kurie reikalauja vizualinio atnaujinimo.