Sobes.tech
Junior

Koje metode postoje za ponovno crtanje View u Androidu?

sobes.tech АИ

Одговор од АИ

Postoje nekoliko osnovnih metoda za upravljanje ponovnim crtanjem (redraw) View u Androidu:

  • invalidate(): Ova metoda označava trenutni View i sve njegove podređene View-ove kao "prljave", zahtevajući ponovno crtanje. Sistem planira prolaz crtanja u budućnosti (obično u sledećem frejmu). Koristi se kada se nešto promeni što utiče na izgled View-a (npr. boja, tekst). Može se pozvati iz bilo kojeg niti.

  • postInvalidate(): Slično invalidate(), ali namenjeno za pozivanje iz pozadinskih niti. Šalje poruku glavnoj niti UI da izvrši invalidate().

  • requestLayout(): Ova metoda ukazuje da View zahteva ponovno izračunavanje svoje veličine i pozicije. Pokreće prolaz merenja i rasporeda (measure and layout pass) nakon crtanja. Koristi se kada se nešto promenilo što utiče na veličinu ili raspored View-a (npr. dodavanje/uklanjanje dece, promena paddinga). Poziva se samo iz glavne niti UI.

Ako su i izgled i veličina/pozicija View-a promenjeni, često je dovoljno pozvati requestLayout(), jer on obično poziva invalidate() u procesu. Međutim, direktna promena samo izgleda zahteva samo invalidate().

Primer korišćenja invalidate():

// Promena boje View-a u glavnoj niti
myView.setBackgroundColor(Color.parseColor("#FF0000"));
myView.invalidate();

Primer korišćenja postInvalidate() iz pozadinske niti:

new Thread(new Runnable() {
    @Override
    public void run() {
        // Promena teksta View-a u pozadinskoj niti
        myView.setText("Novi tekst");
        myView.postInvalidate(); // Ponovno crtanje preko glavne niti
    }
}).start();

Primer korišćenja requestLayout():

// Promena padding-a View-a i zahtev za novo raspoređivanje u glavnoj niti
myView.setPadding(10, 10, 10, 10);
myView.requestLayout();

Važno je razumeti životni ciklus crtanja View:

  1. Promena podataka (npr. boja, tekst, veličina).
  2. Pozivanje invalidate() ili requestLayout().
  3. Sistem planira ponovno crtanje.
  4. Prolaz merenja (measure pass) - pozivanje onMeasure().
  5. Prolaz rasporeda (layout pass) - pozivanje onLayout().
  6. Prolaz crtanja (draw pass) - pozivanje onDraw().

Metoda invalidate() pokreće korak 6, dok requestLayout() pokreće korake 4, 5 i 6.