我有一个扩展SurfaceView并实现SurfaceHolder.Callback的类。使用onDraw()方法我在画布上绘制一些位图。按下按钮后,我将新图像添加到画布调用invalidate()。是否有可能保存我在之前的每个invalidate()上所做的所有更改,以便在new invalidate()添加新图像之后,但不删除之前的更新?
答案 0 :(得分:1)
根据我的理解,你会想要保存所绘制的图像以及它的位置?通过使用我提供的代码,您将拥有一个填充图像和位置的列表。该清单无序;如果您想要一个有序列表,可以使用LinkedList
代替。
创建一个新类,您可以将其命名为。
public class ImageHolder {
private int mX;
private int mY;
private int mDrawableResource;
private String mBitmapFilePath;
public ImageHolder(int x, int y, int drawableResource, String bitmapFilePath) {
mX = x;
mY = y;
mDrawableResource = drawableResource;
mBitmapFilePath = bitmapFilePath;
}
public int getX() {
return mX;
}
public int getY() {
return mY;
}
public int getDrawableResource() {
return mDrawableResource;
}
public String getBitmapFilePath() {
return mBitmapFilePath;
}
}
然后在SurfaceView中,每次绘制到列表时都会添加一个持有者。请注意,这是最低限度的代码,因此未添加任何同步。
private void customDrawMethod() {
mImageHolders.add(new ImageHolder(x, y, drawableResource, bitmapFilePath));
Canvas canvas = getHolder().lockCanvas();
canvas.drawBitmap(bitmap, matrix, paint);
getHolder().unlockCanvasAndPost(canvas);
}
我添加了Bitmap和Drawable,因为我不确定你使用的是什么。我无法发布更多代码,因为我不知道您要对保存的图像做什么。更多信息可以帮助您进一步。
答案 1 :(得分:0)
使用Bitmaps存储以前的画布非常简单。只需将位图附加到画布上即可。在绘制之前,将旧位图保存为类似“prevBitmap”的内容,然后绘制它。您可以通过调用canvas.drawBitmap(prevBitmap);
来重绘先前的位图答案 2 :(得分:0)
您可以在画布上保存旧图纸,并在添加新图片时不要再绘制它们。当您需要将具有左上角坐标(x,y)和大小(sizeX,sizeY)的新图像添加到View的画布时,只需调用invalidate(x,y,x + sizeX,y + sizeY)。即将保存所有图像,你已经得到答案。 附:对不起我的英文,希望这是有帮助的