Sobes.tech
Junior

Millised meetodid on olemas View uuesti joonistamiseks Androidis?

sobes.tech AI

Vastus AI-lt

Androidis on mitu peamist meetodit View'i ümberjoonistamiseks:

  • invalidate(): See meetod märgib praeguse ja kõik alamvaated "mustaks", mis nõuab nende ümberjoonistamist. Süsteem plaanib joonistamisprotsessi tulevikus (tavaliselt järgmises kaadris). Kasutatakse, kui midagi muutub, mis mõjutab View välimust (näiteks värv, tekst). Kutsutakse mistahes niidist.

  • postInvalidate(): Sarnane invalidate(), kuid mõeldud kutsumiseks taustniidist. Saadab sõnum peamisele UI-niidile invalidate() teostamiseks.

  • requestLayout(): See meetod näitab, et View vajab oma suuruse ja asukoha ümberarvutamist. See kutsub välja mõõtmis- ja paigutusprotsessi (measure and layout pass) pärast ümberjoonistamist. Kasutatakse, kui midagi muutub, mis mõjutab View suurust või asukohta (näiteks alamelementide lisamine/eemaldamine, paddingi muutmine). Kutsutakse ainult peamisest UI-niidist.

Kui muutub nii välimus kui ka suurus/asukoht View'il, piisab sageli requestLayout() kutsumisest, kuna see tavaliselt kutsub invalidate() protsessis. Kuid otsene ainult välimuse muutmine nõuab ainult invalidate().

Näide invalidate() kasutamisest:

// View'i värvi muutmine peamise niidiga
myView.setBackgroundColor(Color.parseColor("#FF0000"));
myView.invalidate();

Näide postInvalidate() kasutamisest taustniidist:

new Thread(new Runnable() {
    @Override
    public void run() {
        // View'i teksti muutmine taustniidist
        myView.setText("Uus tekst");
        myView.postInvalidate(); // Ümberjoonistamine peamise niidiga
    }
}).start();

Näide requestLayout() kasutamisest:

// Paddingi muutmine ja paigutuse uuesti arvutamine peamise niidiga
myView.setPadding(10, 10, 10, 10);
myView.requestLayout();

Oluline on mõista View'i joonistamise elutsüklit:

  1. Andmete muutmine (näiteks värv, tekst, suurus).
  2. invalidate() või requestLayout() kutsumine.
  3. Süsteem planeerib ümberjoonistamise.
  4. Mõõtmisprotsess (onMeasure()).
  5. Paigutus (onLayout()).
  6. Joonistamine (onDraw()).

invalidate() käivitab 6. sammu, requestLayout() aga 4., 5. ja 6. sammu.