Canvas相关函数的学习和理解

来源:互联网 发布:部落顶帖软件 编辑:程序博客网 时间:2024/06/06 00:03

前言:

  canvas是view系统很重要的一部分,自己要实现的自定义效果往往需要用到canvas相关的类的组合

  这里是我学习过程中对某些类的理解,供分享。


相关类:

Share,翻译过来是着色器,是设置到画笔里面的,BitmapShader的构造方法的后2个参数是TileMode枚举,CLAMP(0)是拉升的部分用图像边缘的颜色,REPEAT(0)是到边界了重复的再画一遍,MIRROR(0)也是到边界了重画,但是不同的是图像会相反,类似于正反正反正反正。。。。。


Paint,这个是画笔,setAntiAlias(true)能消除画笔的锯齿效果,setStyle(Paint.Style style)方法是画笔画的样式,Fill是画内容,STROKE是只画边缘,FILL_AND_STROKE是边缘和内容都画。


Path,就是路径,要在canvas上面画一些自定义图形都需要这东东,和paint一起使用,path里面有可以设置很多方法,可以多次add很多图像,包括,弧形,圆圈,线条,椭圆,矩形等等。setFillType有好几种模式,

Path.FillType EVEN_ODD,用奇偶规则填充

Path.FillType INVERSE_EVEN_ODD,顾名思义,和EVEN_ODD规则恰好相反。

Path.FillType INVERSE_WINDING,同样,WINDING的反效果。

Path.FillType WINDING,用非零环绕数规则填充。


Canvas,顾名思义就是画布,android画图形的入口,translate(x,y)方法可以转移画布的可见区域起始点,save和restore方法一般是成对使用,save方法相当于对当前的画布位置做了一个记录,然后可以调用平移、缩放等方法,如果想要回到原来的坐标画点东西,可以调用restore方法,能回到之前save位置的坐标体系。剪裁有很多函数,这里以clipRect(Rect rect)和clipRect(Rect rect, Region.Op op)作为说明,画布剪裁了就只能在区域里面画,超过区域的将不被draw。

Region.Op表示多次剪裁的组合,有以下几种:
Region.Op DIFFERENCE A - B
Region.Op INTERSECT A∩B
Region.Op REPLACE B
Region.Op REVERSE_DIFFERENCE B - A
Region.Op UNION A ∪ B
Region.Op XOR (A∪B) - (A∩B) 


PathEffect,用来被paint设置,它有很多子类,

CornerPathEffect(int radius)是圆角效果,将Path中线段形成的角度用圆弧代替,构造参数radius代表了圆弧的半劲.


DashPathEffect(float[] intervals, float phase),虚线效果,例如传递new float[]{5,6,5,7},线段就变成5实线,6空白,5实线,7空白,然后循环,第二个phase代表偏移量,例如phase是3,则第一个线段只有2(5-3)了。所以不断改变phase然后不断的draw可以达到虚线循环移动的效果。


DiscretePathEffect (float segmentLength, float deviation),将线段分离成segmentLength长度的线段,然每2个线段衔接的部分会进行deviation的偏移。


PathDashPathEffect (Path shape, float advance, float phase, PathDashPathEffect.Style style),把path根据shape为最小单位画出来,advance是每2个shape的距离,phase也是偏移量和DashPathEffect的同义,最后的style主要是针对shape的效果,TRANSLATE是每个shape都往一个方向,MORPH是每个shape会根据当前的方向调整位置,如果当前的方向已经不足以显示完一个shape就会扭曲, ROTATE和MORPH相比就是会当前方向不足也会显示完。


ComposePathEffect (PathEffect outerpe, PathEffect innerpe),定义了2种效果的符合使用。


SumPathEffect (PathEffect first, PathEffect second),也是2种效果叠加,但是是第一种先画一边,第二种再画一遍。


0 0