Android Zwei Canvase übereinander legen und anzeigen

estartu

Mitglied
Hallo,

kann man zwei Canvase übereinander legen und beide anzeigen lassen so das man durch
den oberen durchsachauen kann und den darunter liegenden somit auch noch sieht?

Folgender Grund für meine Frage.

Ich programmiere gerade eine App die eine Funktion grafisch darstellen soll.
In die grafische Darstellung der Funktion möchte ich nun im Sekundentakt etwas einzeichnen. Um dann in der nächsten Sekunde die Funktion nicht löschen und neu berechnen (neu zeichnen) zu müssen habe ich mir das so vorgestellt.

Beim Start der App berechne ich die Funktion und zeichne sie in Canvas 1 ein. Nach einer Sekunde Zeichne ich etwas in Canvas 2. Nun lege ich Canvas 2 auf Canvas 1 und zeige beide an.
Da man durch Canvas 2 durchsehen kann, kann man auch die Funktion in Canvas 1 sehen.

In der nächsten Sekunde lösche ich dann Canvas 2 und zeichne erneut in diesen etwas ein und legen dann Canvas2 wieder auf Canvas 1 und zeige beide wieder an.

Kann man das so machen. So würde ich mir sparen die Funktion jede Sekunde neu zu berechnen und neu zu zeichnen.

Sollte so etwas nicht gehen? Hat vielleicht jemand eine andere Idee wie ich das Problem lösen könnte die Funktion jede Sekunde neu zu berechne und neu zu zeichnen. Würde eine Menge Rechenzeit sparen.

estartu
 

Timothy Truckle

Top Contributor
Kann man das so machen. So würde ich mir sparen die Funktion jede Sekunde neu zu berechnen und neu zu zeichnen.

Sollte so etwas nicht gehen? Hat vielleicht jemand eine andere Idee wie ich das Problem lösen könnte die Funktion jede Sekunde neu zu berechne und neu zu zeichnen. Würde eine Menge Rechenzeit sparen.
Das haben sich die Java-Entwickler auch gedacht:
Double Buffering and Page Flipping (The Java™ Tutorials > Bonus > Full-Screen Exclusive Mode API)

bye
TT
 

estartu

Mitglied
Hallo Timothy Truckle,

"double buffering und page flipping" da muss ich die Funktion aber trotzdem
neu berechnen und zeichnen lassen.

Zeit und Rechenpower spare ich dadurch auch nicht.


estartu
 

Timothy Truckle

Top Contributor
was meinst Du mit "Du könntest das Bild in einem eigenen Objekt inkremtell rendern" ?
Grnau dass.
Erzeuge ein unabhängiges [JAPI]Image[/JAPI] Objekt und Zeichne in dessen [JAPI]Graphics[/JAPI]-Kontext (immer nur den aktuellen Abschnitt, der Rest ist ja da...).
Für die Darstellung auf dem Screen übergibst Du dann dieses [JAPI]Image[/JAPI] an den
Code:
Graphics
-Kontext der darstellenden Komponente.

bye
TT
 

schlingel

Gesperrter Benutzer
Das ist sehr speicher intensiv, da für jedes Canvas auch noch ein Bitmap da ist. Das könnte vor allem auf high end Geräten zu Problemen führen durch die immensen Auflösungen die du dann dort unterstützen müsstest.

Ob du Rechenpower durch die zusätzliche View und den damit einhergehenden Speicheraufwand und damit verbundenen GC-Aufwand erzielst solltest du zu aller erst messen bevor du dich in der Idee verlierst. Ich zweifle ehrlich gesagt daran.

Wie Komplex ist denn die Funktion? Warum gibt's andauernd Änderungen? Möglicherweise gibt's da überhaupt einen anderen Lösungsansatz.

@Timothy: Du postest in letzter Zeit dauernd Java SE Zeug in Android-Posts. Hier wird's wohl keine Verwirrung stiften aber bei du könntest Anfänger damit sehr verwirren.
 

Neue Themen


Oben