Junior
Чӣ гуна метавон такрор кардани тасвири View-и фармоишӣ дар Android-ро даъват кард?
sobes.tech AI
Ҷавоб аз AI
Шумо метавонед чанд роҳ барои даъвати навсозӣ (invalidate) ба View-и фармоишӣ истифода баред:
-
invalidate():
- Ҳамаи View-ро навсозӣ мекунад.
- Нақшаи даъвати
onDraw(). - Барои навсозии оддӣ бе муайян кардани минтақаи махсус истифода мешавад.
// Дар дохили View-и шумо ё ҳангоми муомила бо он myCustomView.invalidate() -
invalidate(Rect dirty) ё invalidate(int left, int top, int right, int bottom):
- Танҳо минтақаи муайяншудаи View-ро навсозӣ мекунад.
- Ин самараноктар аст, агар тағирот танҳо ба қисми View таъсир расонад.
// Навсозии минтақа бо координатҳои (10, 20) то (100, 150) myCustomView.invalidate(10, 20, 100, 150) // Ё бо истифода аз Rect val dirtyRect = Rect(10, 20, 100, 150) myCustomView.invalidate(dirtyRect) -
postInvalidate():
- Бехатар барои даъват аз ҳар кадом сӯйи сӯзишворӣ, аз ҷумла аз пасзамина.
- Операсияи
invalidate()-ро ба навбат барои иҷро дар сӯзишвории UI мегузорад.
// Аз сӯзишвории пасзамина даъват кардан Thread { // Ҳисобҳои дарозро иҷро мекунем // ... myCustomView.postInvalidate() }.start()
Мувофиқат байни invalidate() ва postInvalidate():
| Метод | Нишондиҳандаи иҷро | Бехатарӣ аз сӯзишвории пасзамина | Мақсад |
|---|---|---|---|
invalidate() |
Сӯзишвории UI | Не | Навсозии фаврӣ (то ҳадде, ки дар UI мумкин аст) |
postInvalidate() |
Сӯзишвории UI | Бале | Навсозии дер дар навбат бо гузоштани он ба рӯйхати паёмҳо |
Вазъ бо onDraw():
Ҳар кадом аз методҳои invalidate(...) даъвати иҷрои onDraw()-и View-и шумо мебошад. Системаи Android чандин даъватҳоро ба invalidate дар як вақт муттаҳид мекунад, агар имконпазир бошад, барои оптимизатсияи иҷроиш. onDraw() танҳо вақте даъват мешавад, ки системаи омода аст барои навсозӣ.
Вақте ҳар як методро истифода бурдан:
- Истифода баред
invalidate(), вақте ки шумо дар сӯзишвории UI ҳастед (масалан, дар ҳалли клик, пас аз анимация) ва тағирот тамоми View-ро таъсир мерасонанд ё шумо ба оптимизатсия дар минтақа аҳамият намедиҳед. - Истифода баред
invalidate(Rect)ёinvalidate(int, int, int, int)барои оптимизатсия, агар тағирот танҳо ба қисми View таъсир расонад ва шумо дар сӯзишвории UI ҳастед. - Истифода баред
postInvalidate(), вақте ки мехоҳед invalidate-ро аз сӯзишвории пасзамина даъват кунед. - Аз даъвати зиёд ва бе зарурати
invalidate()ёpostInvalidate()худдорӣ кунед, зеро ин метавонад ба иҷроиш таъсири манфӣ расонад. Онҳоро танҳо пас аз тағир додани маълумот ё ҳолати View, ки ба навсозии визуалӣ ниёз доранд, даъват кунед.