/ / Čo spôsobuje OnDraw metódu View, ktorá sa má nazývať a kedy - java, android, android-view, super

Čo spôsobuje OnDraw metódu View, ktorá sa má nazývať a kedy - java, android, android-view, super

Videl som to v triede Textview androidu:

@Override
protected void onDraw(Canvas canvas) {
restartMarqueeIfNeeded();

// Draw the background for this view
super.onDraw(canvas);

v View trieda android, vidím, že je prázdny:

/**
* Implement this to do your drawing.
*
* @param canvas the canvas on which the background will be drawn
*/
protected void onDraw(Canvas canvas) {
}

Prečo by niekto zavolal metódu super triedy, ak je prázdny?

Kde sa nazýva metóda s parametrovým plátnom?

Je parameter plátno automaticky prenesený systémom android?

Kedy sa nazýva metóda ondraw a kým?

Keď je to prepísané, je metóda podtried nazvaná namiesto superclass "?

Toto je môj vlastný pohľad napríklad:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyView(this));


}
}
class MyView extends View {


public MyView(Context context) {
super(context);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
}

Kto volá metódu MyView.OnDraw?

Musí existovať nejaký riadok kódu, ktorý volá metódu Myview.Ondraw.Isnt "to?

odpovede:

2 pre odpoveď č. 1

Ak chcete odpovedať na vaše otázky:

Prečo by niekto zavolal metódu super triedy, ak je prázdny?

Pretože je dobrým postupom zavolať supernie ste si istí, čo je implementácia.Napríklad, ak máte v knižnici rozšírenú triedu triedy a nemáte kód, mali by ste zavolať super metódu.V tomto prípade však nie je potrebné, ale odporúčam to

Kde sa nazýva metóda s parametrovým plátnom?

Nie som si úplne istý, čo tým myslíš, ale keď necháš svoju triedu predísť View, môžete prepísať onDraw takže sa môžete rozhodnúť, ako váš pohľad vyzerá

Je parameter plátno automaticky prenesený systémom android?

Áno

Kedy sa nazýva metóda ondraw a kým?

Aktivita sa nazýva aktivitou, ktorá je pripojená k niekde vo svojom životnom cykle, keď sa prvýkrát stane viditeľným. Nemusíte sa o to báť. Volá sa aj pri volaní invalidate na zobrazenie alebo ak je to považované za špinavé (musí byť prekonané). Vo vašom príklade, onDraw bude volané, ale keďže na plátno nie je nič nakreslené, nebudete vidieť nič na vašej aktivite.Ak pridáte nejaký log na funkciu, uvidíte, že to príde do logcatu

Keď je to prepísané, je metóda podtried nazvaná namiesto superclass "?

Áno, to funguje ako rozšírenie tried a prevratných metód


1 pre odpoveď č. 2

Na onDraw sa nazýva ViewRoot, keď niekto požiadal, prekreslenie jedného to "dieťa zobrazení volaním invalidate alebo postInvalidateOnAnimation. ViewRoot volá onDraw každé dieťa okno, a tí zasa čerpať ich viditeľné deti (v prípade zobrazení) alebo sami (v prípade zobrazení) kým posledný pohľad je vypracovaný.

Kreslenie môže vykonať kedykoľvek na hlavné vlákno, ktoré je ok a býval predvolené na staršie verzie, ale nie vizuálne dokonalé.Alternatívne môže odložiť ďalšie vertikálna synchronizácia cez Choreograf. Moderné Android verzie naplánovať všetky hovory na onDraw, spôsobené neplatnosť a Drawable animácie, cez choreograf.

Plátno je poskytovaná SurfaceFlinger — Android Window system, ktoré interne používa OpenGL ES a hardvéru zloženia spravovať zobrazené okien.

Keď je to prepísané, je metóda podtried nazvaná namiesto superclass "?

áno. Ale nie volania onDraw supertrieda je zriedka platný taktika (prečo sú vám subclassing to na prvom mieste?!) Ak nechcete nič vyvodiť môžete volať setWillNotDraw(true) (predvolená hodnota pre základná trieda zobrazenie je už trueMimochodom).


0 pre odpoveď č. 3

Ďalšie vyššie: spôsobuje softvérovú klávesnicu View.invalidate() -> View.onDraw() poradie po zmene veľkosti okna vyhovieť rozumne "klávesnici".Vlastné View.onDraw() musí opustiť samotnej v štáte, ktorý predpokladá táto možnosť.
To môže vysvetľovať, prečo aplikácia vyvinuté a testované na tablet s klávesnicou bluetooth chová neočakávane v reálnom svete.