我有画布:
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);
在循环之前创建背景(在我创建移动的矩形之前)。
现在我要做的是将带有背景(大蓝色矩形)的画布保存在位图上,然后在循环中绘制在位图上移动的小矩形 - 这样它将绘制矩形,它将移动,它将绘制背景(因此会有移动的矩形和背景)
如何在位图上保存画布,然后在循环中的画布上绘制该位图?
如果您不介意,请发布一个执行我在示例中描述的代码。
答案 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);
如果您有关于代码内容的更多信息(例如自定义视图,游戏循环),我可以帮助您获得更精确的答案。