2010-10-16 24 views
10

Ich habe mich gefragt, ob Canvas eine Grenze Grenze hat.Die Effizienz über Android Leinwand Zeichnung

Ich meine, wenn ich Funktionen wie drawline(), drawbitmap(), drawcircle(), Android wirklich etwas auf der Leinwand zeichnen und einige CPU-Zyklen verschwenden ??

weil nach allen Zeichenfunktionen, das tatsächliche Bild auf dem Bildschirm drucken wird von der Bildschirmgröße entschieden. Und wenn ich etwas verwende, das keine Bildschirmgröße hat, wird es nicht angezeigt.

Ich möchte ein kleines Detail auf meiner Leinwand machen, indem ich viele Zeichnungsfunktionen anrufe und meine Oberfläche "bling bling" mache. Wenn es nicht in Ordnung ist, möchte ich sie nicht benutzen, wenn sie meine Zeichnung verlangsamen.

Ich arbeite an einem kleinen Spiel von der Struktur der Oberflächenansicht, Danke für jeden Hinweis.

für Beispiel:

Ich habe einen Roboter von einem < Fuß -> b außerhalb des Bildschirms.

Es werden 20 Zeichenfunktionen benötigt, um ein Roboter-Bild auf der Leinwand zu zeichnen. Wenn ich den Bildschirm scrolle, kann ich den Roboter sehen.

Also, wenn die Zeichenfunktion außerhalb des Bildschirms wirklich so viel Zeit wie auf dem Bildschirm zeichnen. Ich muss erkennen, dass nur, wenn die Position des Roboters vom Benutzer gesehen werden kann, dann zeichne ich. ansonsten nicht.

Wenn die Zeichenfunktion nicht viel CPU-Zyklen verschwendet, dann kann ich immer zeichnen, auch wenn der aktuelle Bildschirm den Roboter nicht sehen kann.

Antwort

5

Ihre Arbeitsfläche wird durch Ihre Bitmap (2D) oder OpenGL (3D, mit denen ich keine Erfahrung habe) unterstützt. Die gesamte Zeichnung auf Ihrer Leinwand wird an das Begrenzungsrechteck angehängt, das Sie vergrößern, verkleinern und mit neuen Rechtecken oder Pfaden schneiden können. Sie möchten also Ihre Schnittrechte wirklich verwalten, bevor Sie in die Zeichenfläche zeichnen, insbesondere wenn sie von einer Vorlage unterstützt wird eine große Bitmap. Wenn Sie eine Region mit der Bildschirmgröße schneiden, sparen Sie CPU-Zyklen. Wenn es sich bei Ihrem Spiel um ein Scroller-Spiel handelt, können Sie eine Region größer als die Bildschirmgröße markieren und schwenken, wobei Sie gelegentlich auf dem Bildschirm zeichnen, um den Bereich zu aktualisieren, der auf den Bildschirm kommt. Wenn dein Spiel unendlich in alle Richtungen scrollen kann, wirst du mehrere kleinere Leinwände haben wollen, die du überall um deine zentrale Leinwand herum zeichnen kannst, und sie von links nach rechts, von oben nach unten umdrehen, abhängig von den Richtungen deines Scrollspiels . Eine große Bitmap mit einer Zeichenfläche hat möglicherweise einen zu großen Speicherbedarf für ein kleines Gerät.

13

Eine andere Sache, die Canvas-Zeichnung beschleunigen kann, wenn Ihre Leinwand den gesamten Bildschirm abdeckt, ist ein Thema, das keinen Hintergrund hat. Das Standardthema kann mindestens einen farbigen Hintergrund zeichnen und führt zu langsameren Zeichenzeiten, wenn Sie Ihre Ansichten darüber legen, auch wenn Ihre Ansicht den gesamten Bildschirm ausfüllt.

ein Thema verwenden wie:

<style name="Theme.NoBackground" parent="android:Theme"> 
     <item name="android:windowBackground">@null</item> 
    </style> 
</resources> 

Romain Guy eine große Beschreibung dieses Phänomens bei http://www.curious-creature.org/2009/03/04/speed-up-your-android-ui/

+0

hat Wie Sie dies tun, wenn es eine rein individuelle Draw ist (dh keine XML-Datei angehängt) ? –

+1

das war super, also eine große Verbesserung – pt123