Zeichnen Sie SurfaceView aus dem Layout xml

7

für eine SurfaceView, die ich aus Code gemacht habe, konnte ich onDraw() überschreiben.
Aber wie überschreibt man onDraw() von einem SurfaceView , das in einem Layout-XML definiert ist? Gibt es eine Möglichkeit, auf die Methode draw() zuzugreifen?

    
Fugogugo 05.03.2011, 11:34
quelle

1 Antwort

28

Sie können nicht auf die onDraw-Methode einer SurfaceView-Instanz zugreifen, die wie folgt deklariert und dem Layout hinzugefügt wurde:

%Vor%

Die obige Deklaration erstellt eine Instanz von android.view.SurfaceView und fügt sie Ihrem Layout hinzu. Sie können das Verhalten der onDraw-Methode für diese Instanz nicht mehr ändern als den Code / das Verhalten in einer anderen bereits kompilierten Klasse.

Um zu erreichen, wonach Sie fragen, können Sie Ihre eigene Unterklasse von SurfaceView erstellen:

%Vor%

Und dann, um das zu Ihrem Layout anstelle der ursprünglichen Vanille SurfaceView hinzufügen, verweisen Sie einfach auf den voll qualifizierten Namen Ihrer Klasse als ein XML-Element in Ihrem Layout:

%Vor%

Ihre SurfaceView-Unterklasse muss einen Konstruktor deklarieren, der Context und AttributeSet als Parameter akzeptiert. Und vergessen Sie nicht, dass Ihre Oberflächenansicht SurfaceHolder.Callback implementieren und sich bei SurfaceHolder registrieren sollte:

%Vor%

Die Zeichenmethode wird nicht automatisch aufgerufen, aber Sie können sicherstellen, dass der Anfangszustand Ihrer Ansicht beim Initialisieren der Oberflächenansicht gezeichnet wird. Ein Callback wird an surfaceCreated vorgenommen, wo Sie die draw-Methode aufrufen können:

%Vor%

Vôila!

    
svjson 07.03.2011, 22:47
quelle