Junior
Kuidas kutsuda Androidis välja kohandatud vaate uuesti joonistamine?
sobes.tech AI
Vastus AI-lt
On mitu viisi, kuidas kutsuda välja kohandatud View'i uuesti joonistamine (invalidate):
-
invalidate():
- Joonistab kogu View'i uuesti.
- Plaanitakse
onDraw()kutsumine. - Kasutatakse lihtsaks uuesti joonistamiseks ilma konkreetse piirkonna määramiseta.
// Oma View'i sees või sellega suhtlemisel myCustomView.invalidate() -
invalidate(Rect dirty) või invalidate(int left, int top, int right, int bottom):
- Joonistab ainult määratud View'i piirkonna.
- Efektiivsem, kui muudatused mõjutavad ainult osa View'ist.
// Joonistada piirkonda koordinaatidega (10, 20) kuni (100, 150) myCustomView.invalidate(10, 20, 100, 150) // Või Rect abil val dirtyRect = Rect(10, 20, 100, 150) myCustomView.invalidate(dirtyRect) -
postInvalidate():
- Ohutu kutsuda mistahes niidist, kaasa arvatud taustaniidist.
- Paneb
invalidate()toimingu sõnumijärjekorda UI-niidil täitmiseks.
// Kutsutud taustaniidist Thread { // Pikkade arvutuste tegemine // ... myCustomView.postInvalidate() }.start()
Võrdlus invalidate() ja postInvalidate():
| Meetod | Täitmise niit | Ohutus taustaniidist | Eesmärk |
|---|---|---|---|
invalidate() |
UI niit | Ei | Koheselt uuesti joonistamine (nii palju kui võimalik UI-niidil) |
postInvalidate() |
UI niit | Jah | Viivitusega uuesti joonistamine, asetades selle sõnumijärjekorda |
Seos onDraw():ga:
Iga invalidate(...) meetodi väljakutse plaanib teie View'i onDraw() täitmise. Android süsteem ühendab mitu invalidate nõuet ühte, kui see on võimalik, jõudluse optimeerimiseks. onDraw() kutsutakse välja ainult siis, kui süsteem on valmis uuesti joonistama.
Millal kasutada iga meetodit:
- Kasutage
invalidate(), kui olete UI-niidil (näiteks kliki töötleja, pärast animatsiooni) ja muudatused mõjutavad kogu View'i või teile ei ole oluline piirkonna optimeerimine. - Kasutage
invalidate(Rect)võiinvalidate(int, int, int, int)optimeerimiseks, kui muudatused mõjutavad ainult osa View'ist ja olete UI-niidil. - Kasutage
postInvalidate(), kui peate kutsuma invalidate taustaniidist. - Ärge kutsuge
invalidate()võipostInvalidate()liiga sageli ilma vajaduseta, kuna see võib negatiivselt mõjutada jõudlust. Kutsuge neid ainult pärast andmete või oleku muutmist, mis nõuavad visuaalset uuendust.