/ / Android: Wie bekomme ich eine schnellere OnDraw () - Android, Ansicht, Leinwand, Bitmap, Ondraw

Android: Wie man schneller onDraw () - Android, Ansicht, Leinwand, Bitmap, Ondraw

Ich habe eine Aktivität erstellt, die DrawView aufruftextends View, zeichne ich auf einem Canvas so etwas wie einen Binärbaum. Die Größe des Arbeitsbereichs ist größer als die Bildschirmgröße, und die Funktion "onDraw" zeichnet die gesamte Arbeitsfläche, nicht nur den sichtbaren Teil. Ich habe eine horizontale und eine vertikale scrollView hinzugefügt, und offensichtlich wird onDraw immer wieder aufgerufen, um die Ansicht zu aktualisieren. Ich habe mich gefragt, ob ich die Leinwand auf ein Bild (eine Bitmap oder so ähnlich) zeichnen kann, indem ich dieses Bild benutze, um den Baum zu zeigen, ohne die onDraw-Funktion aufrufen zu müssen. Wenn ich das nicht tun kann, was kann ich tun, um schneller zu sehen?

Antworten:

1 für die Antwort № 1

Technisch bezieht sich die Leinwand auf eine Bitmap. Es ist also eigentlich das Bitmap, das größer ist als der Bildschirm. Warum machst du die Bitmap größer als den Bildschirm? Größere Bitmaps = mehr Speicherverbrauch - was die Geschwindigkeit etwas verlangsamen könnte. Du zeichnest nur wirklich innerhalb der begrenzten Bildschirmgrenzen - du denkst vielleicht, dass du den Bildschirm abziehst, aber du nicht. Das Ziehen auf ein anderes Bitmap wird dir nicht helfen - du tust es schon. Ohne auf Ihren Code zu schauen, könnten Sie versuchen:

  • zeichne nur, was sich im Binärbaum durch Aufruf ändert invalidate(rect) was nur neu zeichnet, was sich geändert hat
  • Wenn Ihr Binärbaum statisch sein soll, erstellen Sie einfach ein PNG / JPG und zeigen Sie dieses Bild an, anstatt alles selbst zu zeichnen
  • vergewissern Sie sich, dass Sie die Invalidität nicht mehr als nötig aufrufen

4 für die Antwort № 2

Wenn Sie API 11 oder höher verwenden, können Sie versuchen, das Hardwarebeschleunigungsattribut im Anwendungs-Tag in Ihrem Manifest zu verwenden.

<application ... android:hardwareAccelerated="true" ...>

Abgesehen davon können Sie ein anderes Rendering als View in Betracht ziehen. Sehen Sie sich auch SurfaceView an.

Im Allgemeinen sollten Sie View nicht außer Kraft setzen, es sei denn, Sie bauen eine UI-Komponente (wie einen Button) auf, aber zitieren Sie mich nicht dazu.