Android界面绘制_canvas解析

画布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文件:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值