Frage

Ich mache eine App, die Bedürfnisse der Lage sein, zeichnen neue Grafiken auf dem letzten Satz.

Dies ist meine aktuelle OnDraw () -Methode -

protected void onDraw(Canvas canvas) {

    canvas.drawColor(Color.WHITE);

    if(points.size() > 0) {
        //do some stuff here - this is all working ok
        canvas.drawLine(p1.x, p1.y, p2.x, p2.y, linePaint);
    }   
}

Im Grunde genommen, ich brauche die neuen Grafiken als Schicht auf den letzten zu ziehen, also was ich suche ist eine Möglichkeit, das Bild der letzten Leinwand auf den Strom zu führen.

Ich habe Figur versuchte es mir mit dem canvas.setBitmap () Methode, aber es wirkt sehr lustig.

Jede Hilfe dankbar:)

P. S, wenn es gebraucht wird, erstreckt sich die die Klasse SurfaceView und Geräte SurfaceHolder.Callback

Edit: Das ist, was ich in der OnDraw () -Methode versucht, aber es gerade schließt zwingen

if(bitmap != null) {
        canvas.drawBitmap(bitmap, 0, 0, paint);
        canvas.setBitmap(bitmap);  
    }
War es hilfreich?

Lösung

Können Sie die Antwort selbst:)

@Override
protected void onDraw(Canvas c) {

if(bitmap != null && canvas != null) { 
    canvas.drawLine(p1.x, p1.y, p2.x, p2.y, linePaint);
    c.drawBitmap(bitmap, 0, 0, linePaint);  
}
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

bitmap = Bitmap.createBitmap(width, height, Config.RGB_565);
canvas = new Canvas(bitmap);
canvas.drawColor(Color.WHITE);
}

Arbeiten genau wie beabsichtigt, schafft es die Wirkung der Zeichnung auf der Oberseite der alten Leinwand kontinuierlich

Andere Tipps

Sie werden das vorherige Bild speichern, müssen beharrlich auf eine Arraylist, und während OnDraw, Schleife durch die Arraylist alle Elemente neu zu zeichnen.

so etwas wie folgt aus:

for (Graphic graphic : _graphics) {
    bitmap = graphic.getBitmap();
    coords = graphic.getCoordinates();
    canvas.drawBitmap(bitmap, coords.getX(), coords.getY(), null);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top