私がSOで見たものから、私がやりたいことは可能であれば難しいですが、少なくとも誰かが私がやりたいことをするためのより簡単な方法を提案できることを願っています. 以下のコードは、アイテムをすべてカスタム SurfaceView 内でキャンバスに描画します。私がやりたいのは、キャンバスを表示することに加えて、キャンバス上のすべてをファイルに保存して、いくつかのアクティビティで使用することですが、方法がわかりません。
public void draw()
{
if(holder.getSurface().isValid()) {
Canvas canvas = holder.lockCanvas();
canvas.drawColor(0, Mode.CLEAR);
drawSurface(canvas);
canvas.translate(-56, 30);
int i = 0;
for(Picture a: accessories) {
canvas.translate(0, a_offset[i]);
if(a!=null) {
canvas.drawPicture(a);
}
i++;
}
holder.unlockCanvasAndPost(canvas);
}
}
private void drawSurface(Canvas canvas) {
Rect rect = new Rect();
rect.set(37*screenWidth/480, 146*screenHeight/800, (37 + 300)*screenWidth/480, (146 + 300)*screenHeight/800);
canvas.drawBitmap(avatar, null, rect, null);
}
ファイルを保存するために私が現在行っていることは、基本的に、上記のメソッドのコピーをビットマップから作成されたキャンバス (canvas = new Canvas(bitmap)
の代わりにholder.lockCanvas
) と異なる数で使用して、位置とサイズを正しくすることです。メソッドを組み合わせて、少なくとも異なるメソッドを避けるためにいくつかのパラメーターを与えることができますが、可能であれば、同じキャンバスを使用して画像を描画し、ファイルを保存したいと思います。