在Android中,“位图”一词是一个类,它帮助我们将图像作为位图或位数组进行处理。当我们使用Canvas或OpenGL等图形界面时,这个Bitmap类非常有用。
Canvas是Java中另一个已知的类,用于绘制事物。在Canvas中,我们可以控制所有像素。
我们需要初始化一些变量,
这是我们要绘制的画布。
Canvas canvas = null
这是我们将用来创建视图的布局。
RelativeLayout relativeView ;
这是我们将在视图中设置的背景,我们从资源文件(R.drawable.blackBgrnd
)中获取它。使用BitmapFactory.decodeResource
方法获取资源图像并将其转换为位图(我们将使用Bitmap
类)。必须从我们正在处理的Activity
传递mContext
对象(上下文)。
Bitmap viewBgrnd = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.blackBgrnd)
我们需要另一个位图,在画布上绘制它。我们将这个位图的宽度和高度设置为相对于我们在布局中创建的宽度和高度。现在这个位图是空的,但我们将把它与画布关联起来,这样每次在画布上绘制时,它都会被绘制在这个位图对象中。
Bitmap returnedBitmap = Bitmap.createBitmap(relativeView .width, relativeView.height,Bitmap.Config.ARGB_8888);
首先,我们有了
canvas = null
,现在我们使用之前创建的辅助位图创建一个
Canvas
对象。
canvas = new Canvas(auxBitmap);
现在是创建我们的视图的时候了。
我们可以添加图片,例如:
ImageView newImage = new ImageView(mContext);
newImage.setImageBitmap(bitmapWithImage)
我们可以使用“layout”方法在视图中设置
imageView
的位置:
newImage.layout(l,t,r,b);
l 左侧位置,相对于父级
t 顶部位置,相对于父级
r 右侧位置,相对于父级
b 底部位置,相对于父级
最后将其添加到我们的布局中:
relativeView.addView(newImage)
或者我们可以添加文本:
TextView newText = new TextView(mContext);
newText.setText(“This is the text that its going to appear”);
将其以相同的方式添加到布局中:
relativeView.addView(newText);
一旦我们将所有要添加到布局中的元素都添加完毕,我们就必须创建一个绘制对象:
Paint paint = new Paint();
只是用来定义画布的默认值。
我们使用画布的“drawBitmap”方法:
canvas.drawBitmap(ViewBgrnd, 0, 0, paint);
最后,我们在布局中调用dispatchDraw来在画布上绘制子视图(imageView、textView)。
relativeView.dispatchDraw(canvas)
returnedBitmap是包含画布中视图绘制的位图,我们在其中有布局及其子项作为位图,在Canvas中绘制它们。
结论
这真的很棘手,也许很难理解。我花了一些时间才明白它是如何工作的。我会尝试总结一下:
我们需要创建一个空位图。这个位图将是最终带有视图的位图。
我们使用该位图创建画布。
我们创建一个布局并添加尽可能多的元素。
我们将布局附加到画布上。
因为我们使用位图对象创建了画布,所以在画布中绘制的所有内容都将绘制在位图中。
来自:Bright hub
canvas
实例中dst
的位置? - Guokas