Android, Canvas: Wie lösche (lösche ich den Inhalt einer) Canvas (= Bitmaps) in einem SurfaceView?
Um ein einfaches Spiel, ich benutzte eine Vorlage, zieht eine Leinwand mit bitmaps wie diese:
private void doDraw(Canvas canvas) {
for (int i=0;i<8;i++)
for (int j=0;j<9;j++)
for (int k=0;k<7;k++) {
canvas.drawBitmap(mBits[allBits[i][j][k]], i*50 -k*7, j*50 -k*7, null); } }
(Die Leinwand ist definiert in der "run()" /die SurfaceView lebt in einem GameThread.)
Meine erste Frage ist wie lösche ich (oder zeichnen) die ganze Leinwand für ein neues layout?
Zweitens, wie kann ich das update nur ein Teil des Bildschirms?
//This is the routine that calls "doDraw":
public void run() {
while (mRun) {
Canvas c = null;
try {
c = mSurfaceHolder.lockCanvas(null);
synchronized (mSurfaceHolder) {
if (mMode == STATE_RUNNING)
updateGame();
doDraw(c); }
} finally {
if (c != null) {
mSurfaceHolder.unlockCanvasAndPost(c); } } } }
InformationsquelleAutor der Frage samClem | 2011-04-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfach anrufen
Canvas-Bereich.drawColor(Color.SCHWARZ)
oder welche Farbe auch immer Sie wollen, deaktivieren Sie dieCanvas
mit.Gibt es keine solche Methode, dass Sie einfach aktualisieren Sie ein "Teil des Bildschirms" seit Android OS zieht jedes pixel, wenn der Bildschirm aktualisiert. Aber, wenn Sie nicht-clearing-alte Zeichnungen auf Ihrem
Canvas
die alten Zeichnungen sind immer noch auf der Oberfläche und das ist wohl eine Art "update nur ein Teil" auf dem Bildschirm.So, wenn Sie wollen, um "update-ein Teil des Bildschirms", nur vermeiden, fordern
Canvas.drawColor()
Methode.InformationsquelleAutor der Antwort Wroclai
Zeichnen transparente Farbe mit PorterDuff clear-mode funktioniert der trick für das, was ich wollte.
InformationsquelleAutor der Antwort Sileria
Fand diese in den google-Gruppen und dieses arbeitete für mich..
Entfernt diese Zeichnungen Rechtecke usw. während set-bitmap..
InformationsquelleAutor der Antwort Rukmal Dias
Ich habe versucht, die Antwort von @mobistry:
canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);
Aber es hat nicht für mich gearbeitet.
Die Lösung für mich war:
canvas.drawColor(Color.TRANSPARENT, Mode.MULTIPLY);
Vielleicht einige das selbe problem hat.
InformationsquelleAutor der Antwort Derzu
InformationsquelleAutor der Antwort heMac
verwenden Sie die reset-Methode der Pfad-Klasse
InformationsquelleAutor der Antwort Rakesh
bitte fügen Sie folgenden code auf surfaceview erweitern Konstruktor der Klasse.............
Konstruktor Kodierung
xml-Codierung
versuchen, über code...
InformationsquelleAutor der Antwort Hemant Chand Dungriyal
Für mich Berufung
Canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR)
oder etwas ähnliches würde nur funktionieren, nachdem ich den Bildschirm berühren. SO würde ich rufen Sie die oben genannten Zeile code, aber der Bildschirm würde nur klar, wenn ich dann berührt den Bildschirm. Also, was für mich gearbeitet wurde, rufen Sieinvalidate()
gefolgt voninit()
ist als zur Zeit der Schöpfung die Initialisierung der view.InformationsquelleAutor der Antwort Jason Crosby
Hier ist der code, der von einem minimal-Beispiel zeigt, dass man immer wieder neu jedes pixel des Canvas-Bereich in jedem Rahmen.
In dieser Aktivität erstellen Sie ein neues Bitmap-jede Sekunde auf die SurfaceView, ohne den Bildschirm zu löschen, bevor.
Wenn Sie es testen, werden Sie sehen, dass die bitmap nicht immer geschrieben werden, um den gleichen Puffer, und der Bildschirm wird abwechselnd zwischen den beiden Puffern.
Getestet habe ich es auf meinem Handy (Nexus S, Android 2.3.3) und auf dem emulator (Android 2.2).
InformationsquelleAutor der Antwort Guillaume Brunerie
Leinwand.drawColor(Color.TRANSPARENT, PorterDuff.- Modus.KLAR)
InformationsquelleAutor der Antwort dileep krishnan
InformationsquelleAutor der Antwort aliakbarian
Ihre erste Anforderung, wie klar oder entwerfen ganze Leinwand - Antwort - Leinwand.drawColor(color.Schwarz) - Methode für clearing-Bildschirm mit einer Farbe (schwarz oder was auch immer Sie angeben .
Ihrer zweiten Voraussetzung, wie Sie das update Teil des Bildschirms - Antwort - zum Beispiel, wenn Sie wollen, zu halten, alle anderen Dinge unverändert auf dem Bildschirm, sondern in einem kleinen Bereich des Bildschirms, um eine ganze Zahl(z.B. Zähler), die Zunahmen nach jeweils fünf Sekunden. dann verwenden Sie canvas.drawrect-Methode zu ziehen, die kleine Fläche durch die Angabe von left top right bottom und malen. dann berechnen Sie Ihre Zähler mit dem Wert(mit postdalayed für 5 Sekunden, usw., llike-Handler.postDelayed(Runnable_Object, 5000);) , konvertieren Sie den text-string, berechnen der x-und y-Koordinate in diesem kleinen rect und Verwendung der text-Ansicht zur Anzeige der Wechsel-Zähler-Wert.
InformationsquelleAutor der Antwort Chandu
Einfach anrufen
Leinwand.drawColor(Color.TRANSPARENT)
InformationsquelleAutor der Antwort reznic