Android-də View-in yenidən çəkilməsi üçün hansı metodlar mövcuddur?
sobes.tech Süni İntellekt
AI-dan cavab
Android-də View-in yenidən çəkilməsini idarə etmək üçün əsasən bir neçə üsul mövcuddur:
-
invalidate(): Bu metod cari View və onun bütün uşaq View-lərini "kirlənmiş" kimi işarələyir və yenidən çəkilmə tələb edir. Sistem gələcəkdə (adətən növbəti kadrda) çəkiliş keçidini planlaşdırır. Görünüşə təsir edən bir şey dəyişəndə istifadə olunur (məsələn, rəng, mətn). Hər hansı bir ipdən çağırıla bilər. -
postInvalidate():invalidate()ilə oxşardır, lakin fon ipindən çağırılmaq üçün nəzərdə tutulub. O, əsas UI ipinəinvalidate()-i yerinə yetirmək üçün mesaj göndərir. -
requestLayout(): Bu metod View-in ölçüsünü və mövqeyini yenidən hesablamasını tələb etdiyini göstərir. Yenidən çəkilmədən sonra ölçmə və yerləşdirmə keçidini (measure and layout pass) tetikler. Görünüşün ölçüsü və ya yerləşdirilməsinə təsir edən bir şey dəyişəndə istifadə olunur (məsələn, uşaqların əlavə və ya silinməsi, padding dəyişiklikləri). Yalnız əsas UI ipindən çağırılır.
Əgər həm görünüş, həm də ölçü/mövqe dəyişibsə, adətən requestLayout() çağırmaq kifayətdir, çünki o, ümumiyyətlə invalidate()-i də çağırır. Ancaq, yalnız görünüşün birbaşa dəyişməsi üçün yalnız invalidate() tələb olunur.
invalidate() istifadə nümunəsi:
// Əsas ipdə View-in rəngini dəyişmək
myView.setBackgroundColor(Color.parseColor("#FF0000"));
myView.invalidate();
postInvalidate() fon ipindən istifadə nümunəsi:
new Thread(new Runnable() {
@Override
public void run() {
// Fon ipdə View-in mətnini dəyişmək
myView.setText("Yeni mətn");
myView.postInvalidate(); // Əsas ipdə yenidən çək
}
}).start();
requestLayout() istifadə nümunəsi:
// Padding-i dəyişmək və əsas ipdə yenidən yerləşdirmə tələb etmək
myView.setPadding(10, 10, 10, 10);
myView.requestLayout();
View-in çəkilmə həyat dövrünü başa düşmək vacibdir:
- Məlumatların dəyişdirilməsi (məsələn, rəng, mətn, ölçü).
invalidate()və yarequestLayout()çağırılması.- Sistem tərəfindən yenidən çəkilmənin planlaşdırılması.
- Ölçmə keçidi (
measure pass) -onMeasure()çağırılır. - Layout keçidi (
layout pass) -onLayout()çağırılır. - Çəkilmə keçidi (
draw pass) -onDraw()çağırılır.
invalidate() 6-cı mərhələni başlatır, requestLayout() isə 4, 5 və 6-cı mərhələləri başlatır.