Was ich mcih schon immer beim canvas gefragt habe

Jaiel

Jaiel

Dauergast
235
Hey falls welche mit dem Canvas einer SurfaceView mal gearbeitet haben oder allgm einem view child dann hat man vielleicht mal vergessen den hintergrund bei jedem neuen zeichnen zu übermalen...und das äußerte sich darin dass die alten zeichnugen neben den neuen sichtbar sind

Es flackert sogar , heißt es sieht so aus als ob die alten objekte die gezeichnet wurden bei jedem neuen zeichenvorgang wieder neu gezeichnet werden schicht für schicht und das ist das was mich stutzig amcht!!!

Eigentlich sollte es nciht flackern da 1. das zeichnen ist gebuffert, dadurch dass man erstmal offscreen einen canvas bearbeitet und erst wenn er fertif ist diesen zeigt.

dadurch sollten 2. alle vorherigen objekt überschrieben sein


Aber wieso wird der canvas trotzdem so gemalt als ob er alle schichten von neuem malt udn dann auch ncoh zu unterschiedlichen phasen(so als ob der canvas gezeigt wird bevor er fertig ist?).
 
Ich bin grad durch zufall auf diese Seite gelangt von der ich ncoh ncihts wusste habe heute keine zeit es komplett durchzulesen(ist eine der längsten seiten in den dokus)

https://source.android.com/devices/graphics/architecture.html

ich hoffe dort meine Antwort zu finden....melde mich morgen nochmal
 
Das ist eine gute Frage, ist mir nämlich auch schon hin und wieder mal aufgefallen (auch bei "fremden" apps). Ich könnte mir irgendwelche Skalierungen vorstellen, die dieses Flackern (teilweise habe ich auch wie eine Art blitzen gesehen) hervorrufen. Ist aber nur eine wilde Spekulation.
 
hab jetzt mal ne anfrage bei stack overflow gepostet vllt ergibt sich dort etwas....Android Canvas SurfaceView - Stack Overflow

ich habe nur vage vermutungen die etwas mit dem vsync eines displays, dem surfaceflinger und den buffern im hintergrund zu tun haben aber sicher bin ich noch nicht leider


ich muss mir den link nochmal durchlesen vllt habe ich etwas überflogen was sehr wichtig war

Der ursprüngliche Beitrag von 18:57 Uhr wurde um 19:32 Uhr ergänzt:

wunderbar hab auch gleich ne antwort bekommen :
"The Surface is usually double-buffered, but can be triple-buffered. If it's double-buffered, and you draw 1000 circles, one buffer will have all of the even-numbered circles, and one buffer will have all of the odd-numbered circles. If it's triple-buffered, then one buffer will have circles 0, 3, 6, ..., another will have circles 1, 4, 7, ..., and so on. Every time you draw, it cycles to the next buffer, so you will see the circles "vibrate" or "animate" every time you draw to the screen."
("auch wenn seine antwort mit dem double buffer den google docs widerspricht...dort heißt es dass tripple buffered ist und nur bei sehr langsamen zeichnen von 30fps oder so nur 2 buffer eingesetzt werden)

also switcht er zwischen zwei,drei buffern immer hin und her und zeigt dann immer die jeweiligen buffer die ich unterschiedlich bemalt habe durch das switchen......

ich wusste doch ich hab das "tripple buffern" überflogen!!!!
 

Ähnliche Themen

S
  • Sempervivum
Antworten
2
Aufrufe
470
Sempervivum
S
U
  • unerfahrenerAppEntwickler
Antworten
3
Aufrufe
447
swa00
swa00
R
Antworten
9
Aufrufe
636
koje71
koje71
Zurück
Oben Unten