在Android / Java中使用Canvas绘制图像

时间:2014-09-24 12:13:47

标签: java android image canvas bitmap

我尝试在Canvas上绘制,其中背景是Android中加载的图像。 没有backgroundimage它可以正常工作:

background = (ImageView)view.findViewById(R.id.Background);
Bitmap bitmap = Bitmap.createBitmap(canvasSize,canvasSize,Bitmap.Config.ARGB_8888);
canvas = new Canvas(bitmap);
background.setImageBitmap(bitmap);

我将画布传递给另一个类并在其上绘制。这很好。

但是当我这样做时:

background = (ImageView)view.findViewById(R.id.Background);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); //Just to test

canvas = new Canvas(bitmap); 
//or this
canvas = new Canvas(bitmap.copy(Bitmap.Config.ARGB_8888, true));

background.setImageBitmap(bitmap);

它不会覆盖图像,因此您无法看到这一点。 以下是我使用此画布绘制的其他类的代码:

canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
canvas.drawCircle( (float)sObject.getSideGforce()*mult+add, 
(float)sObject.getFrontRearGforce()*mult+add, 15*V.LOGICAL_DENSITY, dot);                                                                                                                          

我的目标是创建一个自定义尺寸的画布,其中有一个图像作为背景,我可以在上画画。 它是一个Gforce显示器,因此Image将是一些带有数字的圆圈,画布将在其上绘制一个点,这样你就可以看到你拉了多少Gs。就像我已经说过的那样,没有背景就可以完美运行而且我不想每次重新定位点时重绘背景。所以背景应该是静态的,画布上的点应该是动态的(100hz)。 提前谢谢。

解: 它适用于此代码。

view.setBackgroundResource(R.drawable.ic_launcher);

我只需要设置我的视图背景。它将图像拉伸到我片段的大小,但没关系。

1 个答案:

答案 0 :(得分:1)

BitmapFactory.decodeResource()创建且不可变的Bitmap,因此您无法更改它。

您需要创建一个位图作为工作代码,然后使用canvas.drawBitmap()在后​​台绘制所需的位图。然后画出你想要的东西。

编辑:或者在背景中使用setBackground()并仅在画布上绘制点。