在位图中保存画布,然后使用该位图

时间:2014-02-24 14:43:24

标签: android bitmap android-canvas

我有画布:

Canvas c=null;

和一个绘制矩形的循环,因为我在每个循环中更改了rect的位置,rect将在屏幕上移动。

int i=0;
while(isRunning){
   i++;
   c=null;
   Paint p=new Paint();
   p.setColor(Color.BLACK);
   c.drawRect(i,i,i+5,i+5,p);
}

我想为这个例子创建一个backgorund(在所有屏幕上都是一个大的蓝色矩形):

   Paint backgroundP=new Paint();
   backgroundP.setColor(Color.BLUE);
   c.DrawRect(view.getLeft(),view.getTop(),view.getRight().view.getBottom(),backgroundP);

在循环之前创建背景(在我创建移动的矩形之前)。

现在我要做的是将带有背景(大蓝色矩形)的画布保存在位图上,然后在循环中绘制在位图上移动的小矩形 - 这样它将绘制矩形,它将移动,它将绘制背景(因此会有移动的矩形和背景)

如何在位图上保存画布,然后在循环中的画布上绘制该位图?

如果您不介意,请发布一个执行我在示例中描述的代码。

2 个答案:

答案 0 :(得分:1)

您不将画布保存到位图,而是让画布从头开始写入位图。

Canvas canvas = new Canvas(bitmap);

这将使画布写入内存位图。然后使用该画布进行绘制。

答案 1 :(得分:1)

如果您只想在纯色背景上绘制矩形,可以试试这个:

private Paint rectPaint = new Paint();
private Rect rect = new Rect(0, 0, 5, 5);

protected void onDraw(Canvas canvas) {
    canvas.drawColor(Color.BLUE);
    canvas.drawRect(rect, rectPaint);
}

此代码尚未移动您的矩形。您可以使用以下方法向先前定义的rect添加偏移量,从而在画布上移动它。

public void moveRect(int dx,int dy){
    rect.offset(dx, dy);
}

究竟应该发生什么情况取决于您的其余代码。 (也许每次调用onDraw()?)

如果你的目标是在画布上绘制不同的位图,你应该尝试这种方法

canvas.drawBitmap(bitmap, left, top, paint);

为此,您可以从资源加载位图:

Bitmap backgroundBitmap = BitmapFactory.decodeResource(context,
            R.drawable.your_background_bitmap);

或初始化一个空的Bitmap并使用Canvas绘制到该位图:

Bitmap backgroundBitmap = Bitmap.createBitmap(getWidth(), getHeight(),
            Config.ARGB_8888);
Canvas backgroundCanvas = new Canvas(backgroundBitmap);
backgroundCanvas.drawColor(Color.BLUE);

如果您有关于代码内容的更多信息(例如自定义视图,游戏循环),我可以帮助您获得更精确的答案。