今天我们来看看paint里面的PathEffect,还是先来看看PathEffect是什么:“PathEffect is the base class for objects in the Paint that affect the geometry of a drawing primitive before it is transformed by the canvas' matrix and drawn.”大意就是说在绘制中有些类是能够在单元几何图像被canvas的matrix转换前以及绘制之前影响它,而patheffect是这些类的基类。哎,通俗点说就是在绘制图形之前能够改变一些绘制的细节,使绘制出来的图形不同于正常绘制出来的。
知道了它是什么,也知道了patheffect是一个父类,那么我们就来看看它的子类是什么,并且是如何影响我们绘制的图形的。
- DashPathEffect(float intervals[], float phase):这种效果出来的是虚线的效果,来看参数,intervals是一个float类型的数组,要求它的元素个数必须大于等于2 ,如果小于2就会抛出数组越界的异常,为啥不能小于2呢?因为虚线得知道实现画多长实线再画虚线啊,所以它数组里面的第一个元素就是实现绘制的长度,第二个元素师空白的长度,第三、第四个参数以此类推,phase则是一个开始绘制的偏移量,就是绘制多长之后才会执行这个patheffect效果。要出现这个效果的前提是paint的style得设置成STROKE or FILL_AND_STROKE,如果设置成了style == FILL,那么绘制效果就会被忽略了
- CornerPathEffect(float radius):这个是把拐角的尖角变成圆角的一个patheffect效果,因为我们正常的画折线的话,连接处拐角处都是尖角的,参数radius是画的圆角的半径,自然半径越大,圆角越圆喽
- DiscretePathEffect(float segmentLength, float deviation):这是一种凌乱效果,就好比还是折线,正常的折线是直的,然后咱们再想想山间小路,蜿蜒曲折,不会是一条直线,即使会有曲折但是也是不是规律的,那么如果用了DiscretePathEffect就能够实现类似于曲折蜿蜒的山间小路的效果了呢,来看参数:segmentLength首先按照这个长度将原图形路径切割成一段段,然后再次拼接在一起,但是又不是简单的拼接,会按照deviation这个最大偏移量随意偏移原始路径,所以就造成了凌乱效果,因为它是随机偏移的
- PathDashPathEffect(Path shape, float advance, float phase, Style style):这个是用一个path去绘制另外一种path,之前不是有虚线、凌乱效果的嘛,那我想用五角星,三角形等图形来在某个路径上面绘制怎么办?用这个方法就是一种很好的方式,当然如果要出现这种效果前提是paint的style得设置成STROKE or STROKE_AND_FILL,否则也会没有效果;来看参数,shape则是绘制在路径上的图形,例如我们上面说的三角形、五角星等, advance则是每个三角形之间的距离,phase则是偏移量,跟上面的一样,最后一个style则是指定我们绘制用的path在按照路径绘制时候,在拐角处如何放置,它是一个枚举,它的三个值分别代表TRANSLATE(0):只是平移这放置;ROTATE(1):按照绘制使用的Path的中心进行旋转;MORPH(2):就是一个变体。
- SumPathEffect(PathEffect first, PathEffect second):顾名思义就是将两种效果加在一起,其实就是针对一个Path依次使用这两种patheffect,好比我们的第一个DashPathEffect虚线效果的,第二个是DiscretePathEffect就是凌乱效果,那么最终的效果是什么呢?就是会看到虚线效果和凌乱效果叠加在一起,也会有重合的部分,说白了,它是两条路径,只不过一条应用了DashPathEffect,另外一条应用了DiscretePathEffect效果,因为两条路径是一致的,所以应用了两种效果的路径是几乎重合在一起的,真的是只简单的相加
- ComposePathEffect(PathEffect outerpe, PathEffect innerpe):这是将两种效果组合在一起应用在一个绘制路径上面,它是先对路径应用innerpe这种patheffect,然后再对路径应用outerpe这种patheffect,所以其最终出来的是一条路径,好比我们的innerpe是DashPathEffect,而我们的outerpe是DiscretePathEffect,那么过程就是先将路径变为虚线效果,然后再对变为虚线效果的路径应用凌乱的效果最终得到一条路径
都说意图胜千言,那咱们就分别把6种效果的效果图贴出来吧,不过最好的方式还是自己可以亲手code代码运行起来试试:
以上就是关于Path的PathEffect部分,如果有不对之处,欢迎批评指正。