2012-08-13 21 views

Antwort

15

Von der Android-Dokumentation - protected void dispatchDraw (Canvas canvas):

lost aufgerufen, um die untergeordneten Ansichten zu ziehen. Dies kann von abgeleiteten Klassen außer Kraft gesetzt werden, um Kontrolle zu erlangen, kurz bevor ihre Kinder gezeichnet werden (aber nachdem ihre eigene Ansicht gezeichnet wurde).

+0

warum dispatchDraw (Leinwand Leinwand) ??? Können wir stattdessen onDraw (Canvas Canvas) verwenden? –

+4

Dort sollten Sie Ihre Zeichnung machen, ja. 'draw (Canvas canvas)' initiiert das Zeichnen; 'onDraw (Canvas Canvas)' ist wo Zeichnung stattfindet; 'dispatchDraw (Canvas Canvas)' sagt den Kindern der 'ViewGroup', welche gezeichnet werden soll. – Eric

2

Zum Beispiel ist ViewGroup das Parent von Linear-, Relative-, FrameLayout-, AbsoluteLayout. 1

Da die ViewGroup-Klasse abstrakt ist, ist das direkte Erstellen einer Instanz nicht möglich.
Sie 1 aus diesen Einsatz, mit der Funktion:

dispatchDraw(Canvas canvas) 

Aus unbekannten Gründen ziehen die Klassen 1 nicht mit

onDraw(Canvas canvas) 

mit

Zeichnung in
dispatchDraw(Canvas canvas) 

ist Diese Klassen 1, möglich und es macht Spaß, UIs zu erstellen.

Es würde wie folgt aussehen:

///// public class MainActi erstreckt MyLinearLayout. öffentlichen MainActi (Context con ... Super (Fortsetzung ...) MyLinearLayout erstreckt Linearlayout

@Override protected void dispatchDraw (Canvas Leinwand) { canvas.drawColor (Color.yellow); ... ///

oder Sie überspringen-back mit

onDraw(Canvas canvas) 

die sich in der MainActivity "Ansicht" oder beziehen es in einer externen Klasse wie folgt zu zeichnen:

MyMelIsDrawing extends View 
    onDraw(Canvas canvas) 
     //now draw...