Also habe ich eine Animation, die erstellt wird, indem eine Reihe von Bitmaps in der onDraw() -Methode einer benutzerdefinierten Ansicht gezeichnet wird. Es gibt einen Update-Thread, der eine Methode in der benutzerdefinierten Ansicht aufruft, die die Positionen der Bitmaps ändert, die von der onDraw() -Methode gezeichnet werden sollen. Ich möchte die Bitmap speichern, die jedes Mal erstellt wird, wenn der Update-Thread fertig ist, damit ich aus den Bitmaps, die ich speichere, ein gif erstellen kann.Bitmap aus der benutzerdefinierten Ansicht speichern, die eine Animation über die onDraw-Methode hat
fand ich den Code unten ein png von einem Bitmap-Speicher auf die SD-Karte zu speichern und das funktioniert mit einer gespeicherten Bitmap, aber ich habe Probleme mit getDrawingCache():
public void saveView(){
if(counter < 200){
try {
counter++;
System.out.println("Counter : " + counter);
File file = new File(path, "star"+counter+".png");
file.delete();
OutputStream fOut = new FileOutputStream(file);
buildDrawingCache();
getDrawingCache().compress(Bitmap.CompressFormat.PNG, 100, fOut);
destroyDrawingCache();
fOut.flush();
fOut.close();
MediaStore.Images.Media.insertImage(context.getContentResolver(),file.getAbsolutePath(),file.getName(),file.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
}
dies tun im Wesentlichen tut zwei Dinge im Moment:
1) Es dauert etwa 50 Bilder und speichert sie auf der SD-Karte. @ rund 50 es verursacht den Heap zu groß (ich denke, dass destroyDrawingCache() ist nicht in der Lage, tatsächlich zu beenden, ist dies in einem separaten Thread)
2) In den aufgenommenen Bildern können Sie die Scan-Zeilen aus der Pufferaktualisierung, weil ich von einem Puffer nehme, der aktualisiert wird.
Es scheint, dass der getDrawingCache auch onDraw() aufruft, weshalb ich das nicht auf dem UI-Thread in der onDraw selbst haben kann.
Wenn dies möglich ist bitte helfen.
Wird 'saveView()' im UI-Thread aufgerufen? –
no ist es in einem neuen Thread jedes Mal, wenn der onDraw aufgerufen wird. – L7ColWinters