Android 自定义控件学习-PathEffect

PathEffect 路径效果学习

简要介绍

pathEffect见字知意,讲的是有关路径效果的,它有六个子类,分别拥有不同的效果。下面来看一下6个效果。
这里写图片描述

原生效果

不加任何的pathEffect就是下面的样式,折痕比较大,不同的EffectPath的效果是不一样的。
这里写图片描述

CornerPathEffect
  • 让转折的角度显示圆滑
public CornerPathEffect(float radius) {
    native_instance = nativeCreate(radius);
}

Radius就是它过渡的角度或者说圆滑度,值越大,越圆滑

这里写图片描述

0 的时候等于和原生效果一样:

这里写图片描述

Radius是负数的时候,额效果比较糟糕T—T:

这里写图片描述

DiscretePathEffect
  • 离散路径效果
public DiscretePathEffect(float segmentLength, float deviation) {
    native_instance = nativeCreate(segmentLength, deviation);
}

这个效果如下图,像是铁锈的那种效果。
会在路径上绘制很多不规则线段点,有些突出来模拟一种类似生锈铁丝的效果如下图,其构造方法有两个参数,第一个表示的是线段点的大小,值越大线段点越大看起来平缓,值越小,线段点的大小越小,看起来越密集。第二个表示的是线段偏移炸裂的距离,值越大偏移的越大。
这里写图片描述

DashPathEffect
  • 虚线效果
public DashPathEffect(float intervals[], float phase) {
    if (intervals.length < 2) {
        throw new ArrayIndexOutOfBoundsException();
    }
    native_instance = nativeCreate(intervals, phase);
}

这里的float数值的长度最小是2。虚线,一条实线一条虚线。phase是偏移值的意思,动态改变的时候会让路径动起来。

new DashPathEffect(new float[]{20,10,5,10},mPhase);

从图上我们可看出这个效果是一条虚线,是虚实相交显示的。这里的20表示的就是实线的长度,10就是虚线的长度,5是实线的长度,10是虚线的长度。。。等等这里写了4组就是按照20,10,5,10一组显示。你会发现你写了奇数组的话是没有效果的。
这是5.10,15,20,30,40的效果:

这里写图片描述

这是5.10,15,20,30:

这里写图片描述

PathDashPathEffect
  • 可定义路径的虚实效果
public PathDashPathEffect(Path shape, float advance, float phase,
                          Style style) {
    native_instance = nativeCreate(shape.ni(), advance, phase,
                                   style.native_style);
}

PathDashPathEffect和DashPathEffect相似,区别在于PathDashPathEffect可以定义路线虚线的。

Path path =new Path();
path.addRect(0,0,8,8,Path.Direction.CW);
PathDashPathEffect(path,12,mPhase,PathDashPathEffect.Style.ROTATE);

path就是我们换了新样式的path,12表示的是虚实线之前的距离,PathDashPathEffect.Style这个有三个值,不同的值会让小方形显示不同的效果

TRANSLATE(0),//!< translate the shape to each position
ROTATE(1),  //!< rotate the shape about its center
MORPH(2);   //!< transform each point, and turn lines into curves

不同的style在转角处是不一样的。MORPH是做变形过渡效果处理的,TRANSLATE是移动位置形状不改变的过渡,ROTATE则是旋转过渡。下面效果上面是DashPathEffect下面是PathDashPathEffect。

这里写图片描述

ComposePathEffect和SumPathEffect
public ComposePathEffect(PathEffect outerpe, PathEffect innerpe) {
    native_instance = nativeCreate(outerpe.native_instance,
                                   innerpe.native_instance);
}

组合效果,这个类需要两个PathEffect参数来构造一个实例,ComposePathEffect (PathEffect outerpe,PathEffect innerpe),表现时,会首先将innerpe表现出来,然后再在innerpe的基础上去增加outerpe的效果。

public SumPathEffect(PathEffect first, PathEffect second) {
    native_instance = nativeCreate(first.native_instance,
                                   second.native_instance);
}

叠加效果,这个类也需要两个PathEffect作为参数SumPathEffect(PathEffect first,PathEffect second),但与ComposePathEffect不同的是,在表现时,会分别对两个参数的效果各自独立进行表现,然后将两个效果简单的重叠在一起显示出来。

mEffects[5] =new ComposePathEffect(mEffects[2],mEffects[4]);

mEffects[6] =new SumPathEffect(mEffects[4],mEffects[2]);

2,4是DiscretePathEffect和DashPathEffect效果
这里写图片描述
这里写图片描述

组后后的效果是:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值