绘图之Canvas学习

一  Canvas的用法   博客:http://blog.taorenjia.com/?p=237
 
 1.drawCircle(float cx, float cy, float radius, Paint paint) cx 为宽  cy为高  radius 为半径
 
 2.画的都是一层一层的   每画一个 就会加在另一个的上面 类似于层级的关系
 
 3.drawColor (int color)   画颜色  全部画布的颜色   
 
 4.drawText (String text, float x, float y, Paint paint)  x 字的开始X坐标  y 开始的Y坐标   字体大小是在Paint中控制的
 
 
 5.drawText (CharSequence text,    int start,      int end,       float x, float y, Paint paint) 
                                  字符开始位置   字符结束位置   同上
 
 6.drawText(char[] text, int index, int count,            float x, float y, Paint paint) 
               字符数组   下表       从index下表往后几个    x 字的开始X坐标  y 开始的Y坐标
 
 
7.drawTextOnPath (char[] text, int index, int count, Path path, float hOffset, float vOffset, Paint paint) 
 在路径上写字,通过Path来设置直接的路径参数   
hOffset   距离路径开始的距离
vOffset   离路径的上下高度,
 
8. drawTextOnPath (char[] text, int index, int count, Path path, float hOffset, float vOffset, Paint paint)
  同上  
 
9.drawPosText (String text, float[] pos, Paint paint) 
    按照既定点 绘制文本内容      float数组就是点的坐标  比如:
    new float[]{    
            10,10, //第一个字母在坐标10,10    
            20,20, //第二个字母在坐标20,20    
            30,30 //....    
           }
10.drawLine(float startX, float startY, float stopX, float stopY, Paint paint) 
   画线         开始坐标                        结束的坐标
 
11.drawLines (float[] pts, Paint paint) 
   画多条线用的   float数组中存放的是坐标点  pts:绘制直线的端点数组,每条直线占用4个数据。
 
12.drawLines (float[] pts, int offset, int count, Paint paint) 
   同上     offset 从数组中选取开始取数的下标    count 从下标开始往后取多少个数据  一般为4的倍数 因为  每条直线占用4个数据
 
13.draw中的坐标是基于自身的坐标。
 
14.drawPaint(Paint paint) 
 
15.canvas.drawOval(rectf , paint); 椭圆  通过rectf类来给椭圆定义。
 
 
16.drawPath(Path path, Paint paint) 通过Path定义的路径,来画  画出来的都是直线  通过两点定义一条直线
 
 
17.drawPoint(x,y, paint); 画 点   x,y是用来定义坐标的
 
 
18.drawPoints(float[] pts, Paint paint) ;  画多个点  float数组存放点的坐标  两个为一组定义一个点   如果是奇数  就会舍弃一个数据
 
19.drawPoints(float[] pts, int offset, int count, Paint paint)   画多个点  通过从float数组中获取数据 切记:数据角标越界
 
20.drawRGB(a,b,c)  通过三个参数来确定色值   是针对跟个画布  类似于drawColor()方法
 
21.drawRect(float left, float top, float right, float bottom, Paint paint) 画矩形用的 
 
22.drawRoundRect(RectF rect,float rx,float ry,Paint paint)
作用:绘制圆角矩形
第一个参数:矩形实例  用来定义矩形的位置  以及大小 
第二个参数:圆角X轴的半径
第三个参数:圆角Y轴的半径
第四个参数:画笔实例
 
 
23.drawArc(RectF oval,float startAngle,float sweepAngle,boolean useCenter,Paint paint)
作用:绘制弧形(扇形)
第一个参数:矩形实例    说的是上下边距的像素值
第二个参数:弧形的起始角度
第三个参数:弧形的终止角度
第四个参数:是否绘制中心点;如果为真,起始点与终止点都会分别连接中心点,从而形成封闭图形;
            如果为假,则起始点直接连到终止点,从而形成封闭图形。
第五个参数:画笔实例
 
24.rotate(float a)使得画布旋转,float是旋转的度数   )这个方法的旋转中心是坐标的原点,在这个例子里就是屏幕的左上角了
    博客:http://blog.csdn.net/gf771115/article/details/31438075
 
25.translate()作用就是移动原点,默认的原点(0,0)是在屏幕左上角的,你可以通过translate(x,y)把点(x,y)作为原点.
 
26.    drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)  
     画图的   Matrix来设置位置,形态等
27.drawBitmap(Bitmap bitmap, float left, float top, Paint paint)

    画图  left  top分别是离左边 上边的距离   

 
28. drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)

 第一个Rect是图片的裁剪区域

    第二个Rect是屏幕的裁剪区域

    也就是把预定的图片区域显示在预定的屏幕区域上面,这是一种绘制图片的方式,但也可以实通过这个方式实现缩放效果

29.drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)
 Rect src: 是对图片进行裁截,若是空null则显示整个图片

RectF dst:是图片在Canvas画布中显示的区域,
           大于src则把src的裁截区放大,
           小于src则把src的裁截区缩小。

 
说明:
   clipXXX()方法族
           说明:在当前的画图区域裁剪(clip)出一个新的画图区域,这个画图区域就是canvas对象的当前画图区域了。
              例如:clipRect(new Rect()),那么该矩形区域就是canvas的当前画图区域了。
   public int save()
           说明:保存已经由canvas绘画出来的东西,在save()和restore()方法之间的操作不对它们造成影响,例如旋转(roate)等。
               而且对canvas的操作(roate和translate)都是临时的,restore()后不再存在。
   public voidrestore()
           说明:复原sava()方法之前保存的东西资源。
   drawXXX()方法族
           说明:以一定的坐标值在当前画图区域画图。
           注意:图层会叠加,即后面绘画的图层会覆盖前面绘画的图层。
 
   所有画的坐标都是基于原点来画的,原点可以通过translate来移动
 
 
 
二、Paint的用法
1.paint.setStyle(Paint.Style.STROKE);  设置空心的style
2.Paint每用一次 可以再重新设置颜色  重新设置属性 
3. paint.setStrokeWidth((float) 5.0);   画笔的粗细
4.paint.setAntiAlias(true);    用来消除锯齿  使得线条更加的圆滑
 
 
 
三、path的用法
 
 1.用来设置画笔的路径,直接就是写死的路径  path.lineto(x,y);x是X轴的坐标  Y 是Y轴坐标
   比如画一个正方形  可以先moveTo(x,y)到一个坐标点开始  
     path.lineTo(100,200)
     path.lineTo(100,500)
     path.lineTo(400,500)
     path.lineTo(400,200)
     然后将path路径传给canvas就可以画出来  比如:canvas.drawPath(path,paint);
 
 
四、PorterDuff.Mode的用法   举例博客:http://blog.csdn.net/q445697127/article/details/7867529
extends Enum<E extends Enum<E>>
 是枚举的类,主要是存放各种不同的样式  主要用于多层布局的时候,显示那层布局的问题。
1.PorterDuff.Mode.CLEAR
所绘制不会提交到画布上。
 
2.PorterDuff.Mode.SRC
显示上层绘制图片
 
3.PorterDuff.Mode.DST
显示下层绘制图片
 
4.PorterDuff.Mode.SRC_OVER
正常绘制显示,上下层绘制叠盖。
 
5.PorterDuff.Mode.DST_OVER
上下层都显示。下层居上显示。
 
6.PorterDuff.Mode.SRC_IN
取两层绘制交集。显示上层。
 
7.PorterDuff.Mode.DST_IN
取两层绘制交集。显示下层。
 
8.PorterDuff.Mode.SRC_OUT
取上层绘制非交集部分。
 
9.PorterDuff.Mode.DST_OUT
取下层绘制非交集部分。
 
10.PorterDuff.Mode.SRC_ATOP
取下层非交集部分与上层交集部分
 
11.PorterDuff.Mode.DST_ATOP
取上层非交集部分与下层交集部分
 
12.PorterDuff.Mode.XOR
取两层绘制非交集。两层绘制非交集。
 
13.PorterDuff.Mode.DARKEN
上下层都显示。变暗
 
14.PorterDuff.Mode.LIGHTEN
上下层都显示。变量
 
15.PorterDuff.Mode.MULTIPLY
取两层绘制交集
 
16.PorterDuff.Mode.SCREEN
上下层都显示。
 
 
五、Rectf的用法
RectF 这个类包含一个矩形的四个单精度浮点坐标。矩形通过上下左右4个边的坐标来表示一个矩形。
这些坐标值属性可以被直接访问,用width()和 height()方法可以获取矩形的宽和高。
注意:大多数方法不会检查这些坐标分类是否错误(也就是left<=right和top<=bottom). 
RectF一共有四个构造方法: 
 
1.RectF()构造一个无参的矩形 
 
2.RectF(float left,float top,float right,float bottom)构造一个指定了4个参数的矩形 
 
3.RectF(Rect F r)根据指定的RectF对象来构造一个RectF对象(对象的左边坐标不变) 
 
4.RectF(Rect r)根据给定的Rect对象来构造一个RectF对象 
 
 
5.RectF提供了很多方法,下面介绍几个方法: 
 
Public Boolean contain(RectF r);判断一个矩形是否在此矩形内,如果在这个矩形内或者和这个矩形等价则返回true,同样类似的方法还有public Boolean contain(float left,float top,float right,float bottom)和public Boolean contain(float x,float y)。 
 
Public void union(float x,float y)更新这个矩形,使它包含矩形自己和(x,y)这个点。 
 
RectF类提供的方法都比较简单,容易理解,再此就不再一一赘述 
 
Android.graphics.Rect类,这个类同android.graphics.RectF很相似,不同的地方是Rect类的坐标是用整形表示的,而RectF的坐标是用单精度浮点型表示的。这里大家一定要注意 啊。 





原文地址:https://www.cnblogs.com/flyme2012/p/3944830.html