从我在 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
)创建的 Canvas 并使用不同的数字来获得正确的位置和大小。我可以组合这些方法并至少给它们一些参数以避免使用不同的方法,但如果可能的话,我只想绘制图像并使用相同的画布保存文件。