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ď č. 1Ak 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ž true
Mimochodom).
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.