Android自定义view之PathEffect实践

本文介绍了Android中Paint的PathEffect类及其子类的使用,包括DashPathEffect、CornerPathEffect、DiscretePathEffect、PathDashPathEffect、SumPathEffect和ComposePathEffect。通过实例展示了它们如何改变绘制细节,如创建虚线、圆角、随机偏移等效果,并提供了组合效果的解释。建议读者动手实践以加深理解。
摘要由CSDN通过智能技术生成

       今天我们来看看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是一个父类,那么我们就来看看它的子类是什么,并且是如何影响我们绘制的图形的。

  1.  DashPathEffect(float intervals[], float phase):这种效果出来的是虚线的效果,来看参数,intervals是一个float类型的数组,要求它的元素个数必须大于等于2 ,如果小于2就会抛出数组越界的异常,为啥不能小于2呢?因为虚线得知道实现画多长实线再画虚线啊,所以它数组里面的第一个元素就是实现绘制的长度,第二个元素师空白的长度,第三、第四个参数以此类推,phase则是一个开始绘制的偏移量,就是绘制多长之后才会执行这个patheffect效果。要出现这个效果的前提是paint的style得设置成STROKE or FILL_AND_STROKE,如果设置成了style == FILL,那么绘制效果就会被忽略了
  2. CornerPathEffect(float radius):这个是把拐角的尖角变成圆角的一个patheffect效果,因为我们正常的画折线的话,连接处拐角处都是尖角的,参数radius是画的圆角的半径,自然半径越大,圆角越圆喽
  3. DiscretePathEffect(float segmentLength, float deviation):这是一种凌乱效果,就好比还是折线,正常的折线是直的,然后咱们再想想山间小路,蜿蜒曲折,不会是一条直线,即使会有曲折但是也是不是规律的,那么如果用了DiscretePathEffect就能够实现类似于曲折蜿蜒的山间小路的效果了呢,来看参数:segmentLength首先按照这个长度将原图形路径切割成一段段,然后再次拼接在一起,但是又不是简单的拼接,会按照deviation这个最大偏移量随意偏移原始路径,所以就造成了凌乱效果,因为它是随机偏移的
  4. 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):就是一个变体。
  5. SumPathEffect(PathEffect first, PathEffect second):顾名思义就是将两种效果加在一起,其实就是针对一个Path依次使用这两种patheffect,好比我们的第一个DashPathEffect虚线效果的,第二个是DiscretePathEffect就是凌乱效果,那么最终的效果是什么呢?就是会看到虚线效果和凌乱效果叠加在一起,也会有重合的部分,说白了,它是两条路径,只不过一条应用了DashPathEffect,另外一条应用了DiscretePathEffect效果,因为两条路径是一致的,所以应用了两种效果的路径是几乎重合在一起的,真的是只简单的相加
  6. ComposePathEffect(PathEffect outerpe, PathEffect innerpe):这是将两种效果组合在一起应用在一个绘制路径上面,它是先对路径应用innerpe这种patheffect,然后再对路径应用outerpe这种patheffect,所以其最终出来的是一条路径,好比我们的innerpe是DashPathEffect,而我们的outerpe是DiscretePathEffect,那么过程就是先将路径变为虚线效果,然后再对变为虚线效果的路径应用凌乱的效果最终得到一条路径

       都说意图胜千言,那咱们就分别把6种效果的效果图贴出来吧,不过最好的方式还是自己可以亲手code代码运行起来试试:

       

      

       以上就是关于Path的PathEffect部分,如果有不对之处,欢迎批评指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值