Android ApiDemos示例解析(69):Graphics->PathEffects

android.graphics.Path允许使用线段,二次曲线,三次曲线构成路径(类似SVG),Canvas缺省绘制Path时为单色细实线,但在例Android ApiDemos示例解析(65):Graphics->Drawable->ShapeDrawable 我们看到使用PathEffect来修改路径的模式(使用DiscretePathEffect随机更改线段的粗细)。

本例更详细的介绍了其它几种PathEffect的显示效果:

  • CornerPathEffect 修改路径上线段连接处的显示模式(从尖角改为可以指定圆弧半径的圆角连接)。
  • DashPathEffect 虚线显示效果,使用数组来指定需线和间隔的长度。数组中序数为偶数表示虚线的实线长度,奇数为虚线的间隔长度。 只对Paint设为STROKE 或STROKE_AND_FILL时有效。
  • PathDashPathEffect 和DashPathEffect类似显示虚线,但可以自定义虚线的模式(DashPathEffect使用的是矩形,而PathDashPathEffect允许使用Path对象自定义虚线的模式),同样只对Paint设为STROKE 或STROKE_AND_FILL时有效。
  • ComposePathEffect 允许组合两个PathEffect (outer ,inner) , 分两次综合结果ComposePathEffect = Outer(inner(path)).
  • SumPathEffect  组合两个两个PathEffect (first, second)  SumPathEffect=first(path) + second(path).
  • DiscretePathEffect 将路径划分成指定长度的线段,然后把每条线段随机偏移原来的位置。

本例定义了六种PathEffect如下:

1 e[0] = null;     // no effect
2 e[1] = new CornerPathEffect(10);
3 e[2] = new DashPathEffect(new float[] {10555}, phase);
4 e[3] = new PathDashPathEffect(makePathDash(), 12, phase,
5  PathDashPathEffect.Style.ROTATE);
6 e[4] = new ComposePathEffect(e[2], e[1]);
7 e[5] = new ComposePathEffect(e[3], e[1]);
  • e[0] 不含任何PathEffect,缺省绘制Path的风格,单色实线,连接处为尖角。
  • e[1] 连接使用圆弧连接。
  • e[2] 使用缺省的虚线绘制路径。
  • e[3] 使用自定义的图形(本例为一箭头)的虚线绘制路径
  • e[4] 为使用e[2]和e[1]综合效果,虚线并圆弧连接。
  • e[5] 为使用e[3]和e[1]综合效果,自定义虚线并圆弧连接。

注意 onDraw的这两行:

1 mPhase += 1;
2 invalidate();

mPhase 指定的是虚线上虚实偏移,每次加1,相当于交换虚处和实处的位置,而invalidate()将再次出发onDraw ,这样虚实不断变换给人以动画的效果。

而 makePathDash定义了自定义虚线类型上的小箭头图案:

1 private static Path makePathDash() {
2  Path p = new Path();
3  p.moveTo(40);
4  p.lineTo(0, -4);
5  p.lineTo(8, -4);
6  p.lineTo(120);
7  p.lineTo(84);
8  p.lineTo(04);
9  return p;
10 }

按方向键上“中间键”将随机产生一个新的绘制路径。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值