Junior
Kā izsaukt pielāgotā skata pārkrāsošanu Android?
sobes.tech AI
Atbilde no AI
Ir vairākas veidi, kā izsaukt pārkrāsošanu (invalidate) pielāgotam View:
-
invalidate():
- Pārkrāso visu View.
- Plāno
onDraw()izsaukšanu. - Izmanto vienkāršai pārkrāsošanai bez konkrētas zonas norādīšanas.
// Jūsu View iekšpusē vai ar to mijiedarbojoties myCustomView.invalidate() -
invalidate(Rect dirty) vai invalidate(int left, int top, int right, int bottom):
- Pārkrāso tikai norādīto View apgabalu.
- Efektīvāk, ja izmaiņas skar tikai daļu no View.
// Pārkrāsojiet apgabalu ar koordinātēm (10, 20) līdz (100, 150) myCustomView.invalidate(10, 20, 100, 150) // Vai ar Rect val dirtyRect = Rect(10, 20, 100, 150) myCustomView.invalidate(dirtyRect) -
postInvalidate():
- Droši izsaukt no jebkuras pavediena, tostarp fonā.
- Novieto
invalidate()operāciju ziņojumu rindā, lai tā tiktu izpildīta UI pavedienā.
// Izsaukums no fonā esoša pavediena Thread { // Veicam ilgstošus aprēķinus // ... myCustomView.postInvalidate() }.start()
Salīdzinājums starp invalidate() un postInvalidate():
| Metode | Izpildes pavediens | Drošība fonā esošajā pavedienā | Mērķis |
|---|---|---|---|
invalidate() |
UI pavediens | Nē | Nekavējoties pārkrāso (tik daudz, cik iespējams UI pavedienā) |
postInvalidate() |
UI pavediens | Jā | Atliktā pārkrāsošana, ievietojot ziņojumu rindā |
Saistība ar onDraw():
Jebkurš invalidate(...) metodes izsaukums plāno onDraw() izpildi jūsu View. Android sistēma apvieno vairākus invalidate pieprasījumus vienā, ja tas ir iespējams, optimizācijas nolūkos. onDraw() tiek izsaukts tikai tad, kad sistēma ir gatava pārkrāsot.
Kad izmantot katru metodi:
- Izmantojiet
invalidate(), kad atrodaties UI pavedienā (piemēram, klikšķa apstrādē, pēc animācijas) un izmaiņas ietekmē visu View vai jums nav svarīga zonas optimizācija. - Izmantojiet
invalidate(Rect)vaiinvalidate(int, int, int, int)optimizācijai, ja izmaiņas skar tikai daļu View un atrodaties UI pavedienā. - Izmantojiet
postInvalidate(), ja jums nepieciešams izsaukt invalidate no fonā esoša pavediena. - Neizsauciet
invalidate()vaipostInvalidate()pārāk bieži bez nepieciešamības, jo tas var negatīvi ietekmēt veiktspēju. Izmantojiet tos tikai pēc datu vai stāvokļa izmaiņām, kas prasa vizuālo atjauninājumu.