したがって、カスタムビューのonDraw()メソッドでビットマップを描画してアニメーションを作成しています。 onDraw()メソッドによって描画されるビットマップの位置を変更するカスタムビューのメソッドを呼び出す更新スレッドがあります。私がしたいのは、更新スレッドが終了するたびに作成されたビットマップを保存して、保存するビットマップからgifを作成できるようにすることです。onDrawメソッドでアニメーションを行っているカスタムビューからビットマップを保存します。
私はSDカードにメモリに格納されているビットマップをPNGを保存するために以下のコードを発見し、それが保存されたビットマップで動作しますが、私は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();
}
}
}
今のところ基本的に2つのことをしています:
1)約50枚の画像があり、それをSDカードに保存します。 @約50それはヒープを大きくなる(私はdestroyDrawingCache()は、これは別のスレッドであるため、実際に終了することはできません)
2)撮影した写真では、私は更新されたバッファから取っているので、バッファの更新。
getDrawingCacheがonDraw()を呼び出すように思えるので、onDraw自体のUIスレッドでこれを行うことはできません。
可能な場合はお手数ですが、
'saveViewは、()' UIスレッド上で呼ばれているのですか? –
は、onDrawが呼び出されるたびにそのスレッドに新しいスレッドがありません。 – L7ColWinters