如何将自定义视图转换为位图?

时间:2011-12-08 09:58:54

标签: android bitmap

我准备了一个自定义视图。我的视图包含一个字母表,我在onDraw()中使用drawText绘制。现在我需要将此视图更改为位图。

这里我的OnDraw()是,

public void onDraw(Canvas canvas) {

   drawText("A",100,200,mPaint); 
  }

我需要将此视图转换为位图...请帮助我...提前感谢。

3 个答案:

答案 0 :(得分:4)

对于那些已经设置了自己的视图并且想要比AutoCoders更短的解决方案的人:

Bitmap result = Bitmap.createBitmap(dst.getWidth(), dst.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(result);
dst.draw(c);

在此之后,位图“结果”将包含您的视图 'dst'是您想要的视图位图。

答案 1 :(得分:3)

Bitmap viewCapture = null;

theViewYouWantToCapture.setDrawingCacheEnabled(true);

viewCapture = Bitmap.createBitmap(theViewYouWantToCapture.getDrawingCache());

theViewYouWantToCapture.setDrawingCacheEnabled(false);

答案 2 :(得分:1)

在Android中,单词“bitmap”是一个帮助我们将图像作为位图或位数组来处理的类。当我们使用Canvas或OpenGL等图形界面时,这个Bitmap类非常有用。

Canvas是Java中的另一个已知类,用于绘制内容。在Canvas中,我们可以控制所有像素。

我们需要初始化一些变量,

这是我们要画的画布。

Canvas canvas = null

这是我们用来创建视图的布局。

RelativeLayout relativeView ;

这是我们将在视图中设置的背景,我们从资源文件(R.drawable.blackBgrnd)获取它。 BitmapFactory.decodeResource方法用于获取资源图像并将其转换为位图(我们将使用Bitmap类)。必须从我们正在处理的mContext传递对象Activity(上下文)。

Bitmap viewBgrnd = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.blackBgrnd);

我们需要另一个位图,在画布上绘制它。我们设置此位图的宽度和高度相对于我们在布局中创建的宽度和高度。现在这个Bitmap是空的,但是我们要将它与画布相关联,所以每次我们在画布上绘制时,它都会在这个位图对象中绘制。

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)

我们可以使用“布局”方法在视图中设置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 paint = new Paint();

只是为了定义绘画的默认值。

我们使用画布中的“drawBitmap”方法:

canvas.drawBitmap(ViewBgrnd, 0, 0, paint);

最后我们在布局中调用dispatchDraw来在画布中绘制子视图(imageView,textView)。

relativeView.dispatchDraw(canvas);

returnsBitmap是包含画布中视图绘图的位图,在它上面,我们将布局及其子图形作为位图,然后在画布中绘制它们。

<强>结论

这真的很棘手,也许很难理解。我花了很多时间来理解它是如何工作的。我将试着总结一下:

我们需要创建一个空位图。这个位图将是带有视图的最终位图。 我们使用该位图创建画布。 我们创建一个布局,并添加尽可能多的元素。 我们将布局附加到画布上。 因为我们使用位图对象创建了画布,所以在画布中绘制的所有内容都将在位图中绘制。

来自:Bright hub