画布Canvas

  在Android下进行2D绘图需要Canvas类的支持,它位于"android.graphics.Canvas"包下,直译过来为画布的意思,用于完成在View上的绘图。    

  Canvas为提供了两个构造函数:

  • Canvas():创建一个空的Canvas对象。
  • Canvas(Bitmap bitmap):创建一个以bitmap位图为背景的Canvas。

  既然Canvas主要用于2D绘图,那么它也提供了很多相应的drawXxx()方法,方便我们在Canvas对象上画画,drawXxx()具有多种类型,可以画出:点、线、矩形、圆形、椭圆、文字、位图等的图形,这里就不再一一介绍了,只介绍几个Canvas中常用的方法:

  • void drawBitmap(Bitmap bitmap,float left,float top,Paint paint):在指定坐标绘制位图。
  • void drawLine(float startX,float startY,float stopX,float stopY,Paint paint):根据给定的起始点和结束点之间绘制连线。
  • void drawPath(Path path,Paint paint):根据给定的path,绘制连线。
  • void drawPoint(float x,float y,Paint paint):根据给定的坐标,绘制点。
  • void drawText(String text,int start,int end,Paint paint):根据给定的坐标,绘制文字。
  • int getHeight():得到Canvas的高度。
  • int getWidth():得到Canvas的宽度。

  

画笔Paint

  从上面列举的几个Canvas.drawXxx()的方法看到,其中都有一个类型为paint的参数,可以把它理解为一个"画笔",通过这个画笔,在Canvas这张画布上作画。 它位于"android.graphics.Paint"包下,主要用于设置绘图风格,包括画笔颜色、画笔粗细、填充风格等。

  Paint中提供了大量设置绘图风格的方法,这里仅列出一些常用的,高级的内容有时间再详细讲解:(Paint设置Model:http://blog.csdn.net/hiyohu/article/details/12509731)

  • setARGB(int a,int r,int g,int b):设置ARGB颜色。
  • setColor(int color):设置颜色。
  • setAlpha(int a):设置透明度。
  • setPathEffect(PathEffect effect):设置绘制路径时的路径效果。
  • setShader(Shader shader):设置Paint的填充效果。
  • setAntiAlias(boolean aa):设置是否抗锯齿。
  • setStrokeWidth(float width):设置Paint的笔触宽度。
  • setStyle(Paint.Style style):设置Paint的填充风格。
  • setTextSize(float textSize):设置绘制文本时的文字大小。

 

      android View绘制流程是一个十分复杂的过程。但是单纯的UI显示而言,View能反馈到屏幕上相应的图像都是通过Paint在Canvas之上绘制产生的。

      在android.jar中可以追到Canvas 源代码当中,其中Canva的draw方法基本上都是通过Native方法直接在内存中去操作的.

      Bitmap作为操作系统中基本图像格式,无论View中加载的何种资源,只要需要在屏幕中去显示这个资源图像,都需要经过View的Draw方法.首先需要View中的资源转换成相应的Bitmap,然后以Canvas为依托绘制显示出对应的图像到显示屏幕上.在View(如果一个View没有任何的资源显示的话,绘制出来屏幕上也是观察不到的)的绘制过程中,只需要去操作View要绘制的Bitmap就能够得到我们自己需要的View形状.操作View的绘制就是操作Bitmap绘制.简单的平移缩放等动作可以直接通过调整Canvas的Matrix(矩阵为3*3二维矩阵)来调整Bitmap显示结果.归根究底对于底层内存而言,不会View的概念,即使是时时刻刻看到的屏幕也只是rameBuffer(android中的图像显示设备,图像文件存储位置/dev/graphics/fb0,如果多屏话文件目录略有不同,大部分的app截屏原理就是同读取FrameBuffer然后转换Bitmap最后生成一定格式的图片进行本地存储)而已,基本上操作的Canvas的属性就操控的View的显示结果.

        关于Paint的理解: Canvas在android系统中负责显示,就像人们画画一样,有了画布,没有画笔当然也是不可能绘制出令人满意的作品来.文章开头同样给出了Paint的基本属性的设置,我们可以根据自己的实际需求来设置相应的数据.当然Paint还有一个很重要的应用同样体现在他的属性设置当中.比如在需要绘制得到一些异形图像时,我们并不能够通过调整Canvas的缩放平移等操作得到的图像效果,这时候只需要简单的设置Paint的样式就能够解决我们的所有问题

demo文件:

更多相关文章

  1. android 处理生命周期事件
  2. Android振动系统学习
  3. Android——IPC机制(一)IPC概念以及Binder机制
  4. Android开发基本篇(二)
  5. Android(安卓)SQLite详解
  6. Android学习笔记(十七)数据保存
  7. android framework中添加使用第三方jar包
  8. Android(安卓)Service与Activity之间通信的几种方式
  9. Android(安卓)camera预览流程

随机推荐

  1. TSLib ported to Android(安卓)for touch
  2. android sqlite 增删查 demo
  3. Android所有系统资源图标android.R.drawa
  4. android 中判断有无网络连接
  5. 启动android默认浏览器
  6. Android客户端GPS定位源码
  7. Android(安卓)7.0,8.0拍照loadXmlMetaData
  8. mtk android sd卡调试
  9. 关于android菜单
  10. 【android】在adapter中获取listview的实