2015-03-07 5 views
7

Ich frage mich, ob es eine Möglichkeit gibt, gefüllte Bereiche (wie ein gefülltes Polygon) mit dem Android Canvas ohne die Path Klasse zu zeichnen und canvas.drawPath(...) anrufen.Gibt es eine Möglichkeit, einen gefüllten Bereich mit Canvas zu zeichnen, ohne Path zu verwenden?

Der Grund, warum ich dies ohne Path tun möchte, ist, weil ich sehr große Datensätze zeichnen muss und canvas.drawPath(...) ist nicht hardwarebeschleunigt und daher langsam.

Die Leistung bei der Verwendung von canvas.drawLines(...) ist viel besser wegen der Hardwarebeschleunigung, aber ich habe keine Möglichkeit gefunden, das mit diesem Ansatz gefüllte Polygon zu zeichnen (auch wenn die Linien alle verbunden sind).

Selbst beim Aufruf wurde das Polygon nicht gefüllt, wenn drawLines(...) verwendet wurde.

Gibt es eine Möglichkeit, ein gefülltes Polygon zu zeichnen, ohne den Path Ansatz zu verwenden?

Oder gibt es einen anderen Weg, um die Leistung mit der Canvas zu verbessern?

+0

Ist Ihre 'Ansicht' interaktiv (haben Sie Änderungen an Ihrem Datensatz im laufenden Betrieb, die gerendert werden müssen)? Einfach einmal den Datensatz auf die Leinwand zu ziehen ist langsam? –

+0

Meine Ansicht ist interaktiv und daher ständig aktualisiert, ich verwende bereits einen Puffermechanismus, der die Leistung erheblich verbessert. Ich bin jedoch noch nicht zufrieden. –

+0

Meine letzte Frage, um eine Antwort zu erarbeiten. Wenn eine Änderung an Ihrem Datensatz auftritt, zeichnen Sie den gesamten Datensatz erneut oder nur die betroffenen im Bereich der Änderung? Ich meine, benutzt du schon 'view.invalidate (Rect dirty)'? Dies ist nur ein Tipp, um die Leistung zu verbessern. –

Antwort

0

Sie können sich die OpenGL-Ansicht ansehen und sie für alle Zeichnungen verwenden, die Sie benötigen. Definitiv wird verdammt schnell sein. Trotzdem muss der gesamte Zeichnungscode neu geschrieben werden.

+3

Beantworte nicht wirklich die Frage, die speziell nach einer Lösung fragt, die 'Canvas' verwendet. –

+1

Ja, ich bin mir bewusst, dass OpenGL ES schneller ist. Es ist jedoch keine Option für mich. –

0

Sie müssen wahrscheinlich etwas tun:

Paint red = new Paint(); 

red.setColor(android.graphics.Color.RED); 
red.setStyle(Paint.Style.FILL); 

Und verwenden Sie diese Farbe für Ihren Weg, statt Ihre ARGB. Stellen Sie sicher, dass der letzte Punkt Ihres Pfades auf dem ersten endet, es macht auch Sinn.

Verwandte Themen