轻量级的Picture

来源:互联网 发布:飞控编程用什么语言 编辑:程序博客网 时间:2024/06/01 08:10

轻量级的Picture

  在Android中绘图时,我们经常会使用Drawable和Bitmap,有时候会觉得略显笨重。正因为如此,Android为我们提供了另一套轻量级的Api — Picture

  一个Picture对象通过beginRecording()得到一个Canvas对象,然后可以用这个Canvas对象记录了绘制的步骤,最后可以将Picture回显在视图上。对于大多数内容,如文字、线条、矩形等等,Picture都比与它同等的API快一些,因为picture回显时不会引起其他方法的调用。

  我们记录绘制操作的recordCanvas是通过public Canvas beginRecording (int width, int height)得到的,这里的width和height就是我们希望创建的picture的宽高。我们得到recordCanvas对象后,就可以对在recordCanvas上绘制我们想要的内容,在绘制完成后调用public void endRecording ()。这里有三点值得注意:

  • 在recordCanvas上绘制的内容现在还不会显示
  • 在调用endRecording()后,我们就不能继续使用之前的recordCanvas
  • 如果我们没有调用endRecording()就直接使用了picture,endRecording()就会被自动调用

  当我们想将Picture回显到view上时,直接在View的onDraw()中canvas.drawPicture(Picture)或者Picture.draw(Canvas)就好。

  对了,使用Picture时记得关闭硬件加速,否要么都不显示,要么会抛java.lang.SecurityException,当时找原因找了好久-_-

private final class PictureView extends View {      private Picture mPic;      private Paint mPaint;      public PictureView(Context context) {         super(context);         init();      }      public void init(){          mPic = new Picture();          mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);          mPaint.setTextSize(30);          Canvas c = mPic.beginRecording(200, 200);          mPaint.setColor(Color.YELLOW);          c.drawCircle(mPic.getWidth() / 2, mPic.getHeight() / 2, mPic.getWidth() / 2, mPaint);       mPaint.setColor(Color.BLACK);       c.drawText("Hello~~", 0, 60, mPaint);       c.drawLine(0, 60, 100, 60, mPaint);       mPic.endRecording();   }   @Override   protected void onDraw(Canvas canvas) {       mPic.draw(canvas);   }}
0 0
原创粉丝点击