Graphics>Pictures
本例讲解绘制Picture对象的几种方式
从功能上看android.graphics.Picture 和 android.graphics.Bitmap 非常像。 Picture可以记录在Canvas上每个绘制操作(通过beginRecording返回的Canvas),然后回放每个绘图操作。同时也支持将Picture中的内容写到Stream中,并支持从Stream恢复Picture。这些功能使用Bitmap也能实现。但Picture 只是记录绘图操作而不是绘制后的像素结果,因此存储大小比同样大小的Bitmap要小得多,本例Picture写到Stream的大小为385个字节。而对于的绘图区域为200X100,如以RGB888格式则需要80000字节。没有仔细研究Picture的内部格式,举个类似的例子,Picture可能存储类似SVG的指令(绘图操作)而非渲染之后的结果。
创建一个Picture对象,开启记录,和关闭记录
如果对绘制某一个操作多次重复绘制的话,可以使用这种记录的方式处理。
mPicture = new Picture();
drawSomething(mPicture.beginRecording(200, 100));
mPicture.endRecording();
static void drawSomething(Canvas canvas) {
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
p.setColor(0x88FF0000);
canvas.drawCircle(50, 50, 40, p);
p.setColor(Color.GREEN);
p.setTextSize(30);
canvas.drawText("Pictures", 60, 60, p);
}
画picture的方法有一下几种:
canvas.drawPicture(mPicture);
canvas.drawPicture(mPicture, new RectF(0, 100, getWidth(), 200));
也可以把picture封装成一个drawable来绘制
mDrawable = new PictureDrawable(mPicture);
mDrawable.setBounds(0, 200, getWidth(), 300);
mDrawable.draw(canvas);
还可以通过输出和输入流来绘制
ByteArrayOutputStream os = new ByteArrayOutputStream();
mPicture.writeToStream(os);
InputStream is = new ByteArrayInputStream(os.toByteArray());
canvas.translate(0, 300);
canvas.drawPicture(Picture.createFromStream(is));