本节引言:

本节继续来学习Paint的API——PathEffect(路径效果),我们把画笔的sytle设置为Stroke,可以
绘制一个个由线构成的图形,而这些线偶尔会显得单调是吧,比如你想把这些先改成虚线,又
或者想让路径的转角变得圆滑等,那你就可以考虑使用这个PathEffect来实现了!

官方API文档:PathEffect
进去看文档,可以发现这个PathEffect和我们前面学的MaskFilter(面具)与ColorFilter(颜色
过滤器)一样,几乎没有可用的方法:

我们一般使用的是他的六个子类:

下面我们依次对他们的作用,以及构造方法进行分析!


1.子类作用与构造方法参数分析:


1)CornerPathEffect

CornerPathEffect(float radius)

将Path的各个连接线段之间的夹角用一种更平滑的方式连接,类似于圆弧与切线的效果。
radius则是指定圆弧的半径!


2)DashPathEffect

DashPathEffect(float[] intervals, float phase)

将Path的线段虚线化,intervals为虚线的ON和OFF的数组,数组中元素数目需要 >= 2;
而phase则为绘制时的偏移量!


3)DiscretePathEffect

DiscretePathEffect(float segmentLength, float deviation)

打散Path的线段,使得在原来路径的基础上发生打散效果。
segmentLength指定最大的段长,deviation则为绘制时的偏离量。


4)PathDashPathEffect

PathDashPathEffect(Path shape, float advance, float phase, PathDashPathEffect.Style style)

作用是使用Path图形来填充当前的路径,shape指的填充图形,advance是每个图形间的间隔,
style则是该类自由的枚举值,有三种情况:ROTATEMORPHTRANSLATE

  • ROTATE情况下:线段连接处的图形转换以旋转到与下一段移动方向相一致的角度进行连接
  • MORPH情况下:图形会以发生拉伸或压缩等变形的情况与下一段相连接
  • TRANSLATE情况下:图形会以位置平移的方式与下一段相连接

5)ComposePathEffect

ComposePathEffect(PathEffect outerpe, PathEffect innerpe)

作用是:组合效果,会首先将innerpe变现出来,接着在innerpe的基础上来增加outerpe效果!


6)SumPathEffect

SumPathEffect(PathEffect first, PathEffect second)

作用是:叠加效果,和ComposePathEffect不同,在表现时会将两个参数的效果都独立的表现出来,
接着将两个效果简单的重叠在一起显示出来!


2.写代码来验证各自的效果

多说无益,写代码最实际,我们写下代码来试试这几个子类各自所起的效果!

运行效果图

实现代码

我们自己来写一个View,里面的线移动的效果是phase增加造成的,每次 + 2,
然后invalidate重绘而已,所以别惊讶!PathEffectView.java:

/**
 * Created by Jay on 2015/10/30 0030.
 */
public class PathEffectView extends View {

    private Paint mPaint;
    private Path mPath;
    private float phase = 0;
    private PathEffect[] effects = new PathEffect[7];
    private int[] colors;

    public PathEffectView(Context context) {
        this(context, null);
    }

    public PathEffectView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public PathEffectView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    //初始化画笔
    private void init() {
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); //抗锯齿
        mPaint.setStyle(Paint.Style.STROKE);       //绘画风格:空心
        mPaint.setStrokeWidth(5);                  //笔触粗细
        mPath = new Path();
        mPath.moveTo(0, 0);
        for (int i = 1; i 

好的,代码的注释已经非常清楚了,这里也不唠叨了~


3.本节示例代码下载:

PathEffectDemo.zip


本节小结

本节没什么难的东西,就介绍了PathEffect的六个子类所起的作用,只需调用setPathEffect 方法应用到Paint对象中,非常简单~嗯,就说这么多,谢谢~

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
  1. 免费下载或者VIP会员资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
  2. 提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或联络我们。
  3. 找不到素材资源介绍文章里的示例图片?
    对于会员专享、整站源码、程序插件、网站模板、网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
  4. 付款后无法显示下载地址或者无法查看内容?
    如果您已经成功付款但是网站没有弹出成功提示,请联系站长提供付款信息为您处理
  5. 购买该资源后,可以退款吗?
    源码素材属于虚拟商品,具有可复制性,可传播性,一旦授予,不接受任何形式的退款、换货要求。请您在购买获取之前确认好 是您所需要的资源

评论(0)

提示:请文明发言