Middle
Opowiedz o metodach, które rysują ponownie widok.
sobes.tech AI
Odpowiedź od AI
Metody:
invalidate(): Oznacza widok jako "brudny", wymagający ponownego rysowania. Planowane jest wykonanieonDraw()w przyszłości. Rysowanie odbywa się w głównym wątku. Używane, gdy zmieniają się zewnętrzne właściwości widoku (np. kolor, tło itp.).postInvalidate(): Podobnie doinvalidate(), ale może być wywołane z dowolnego wątku, nie tylko z głównego. Bezpieczne do użycia w wątkach tła.requestLayout(): Oznacza widok jako "nieprawidłowy", wymagający ponownego obliczenia rozmiaru i położenia. Planowane jest wykonanieonMeasure()ionLayout(), a następnieonDraw(). Używane, gdy zmieniają się rozmiary lub pozycja widoku (np. przy dodawaniu/usuwaniu elementów potomnych wViewGroup).
Porównanie metod:
| Metoda | Wątek wywołania | Ponowne obliczenie layout | Rysowanie |
|---|---|---|---|
invalidate() |
Wątek UI | Nie | Tak |
postInvalidate() |
Dowolny wątek | Nie | Tak |
requestLayout() |
Wątek UI | Tak | Tak (po layout) |
Przykład użycia invalidate():
// Zmiana koloru widoku i żądanie ponownego rysowania
myView.setBackgroundColor(Color.RED)
myView.invalidate()
Przykład użycia requestLayout():
// Dodanie elementu potomnego do LinearLayout i żądanie ponownego obliczenia layoutu i rysowania
val newTextView = TextView(context)
linearLayout.addView(newTextView)
linearLayout.requestLayout()