Android Api demo系列(21) (Graphics>PathEffects)

Graphics>PathEffects

这个例子的主要讲解path的绘制修饰。

当你绘制path的时候需要的参数如下:一个path对象,和一个画笔
                canvas.drawPath(mPath, mPaint);
要怎样修饰这个path呢,答案就在这个画笔当中,要给画笔设置PathEffect对象。
 mPaint.setPathEffect(mEffects[i]);

在例子中 创建了一个数组去保存各个patheffect对象
        private static void makeEffects(PathEffect[] e, float phase) {
            e[0] = null;     // no effect
            e[1] = new CornerPathEffect(10);//打磨棱角 输入半径
            e[2] = new DashPathEffect(new float[] {10, 5, 5, 5}, phase);//虚线
            //可以自定义虚线的样式
            e[3] = new PathDashPathEffect(makePathDash(), 12, phase,
                                          PathDashPathEffect.Style.ROTATE);
            e[4] = new ComposePathEffect(e[2], e[1]);//组合上面两个的特点
            e[5] = new ComposePathEffect(e[3], e[1]);
        }
e[0] 不含任何PathEffect,缺省绘制Path的风格,单色实线,连接处为尖角。
e[1] 连接使用圆弧连接。
e[2] 使用缺省的虚线绘制路径。只对Paint设为STROKE 或STROKE_AND_FILL时有效。
e[3] 使用自定义的图形(本例为一箭头)的虚线绘制路径只对Paint设为STROKE 或STROKE_AND_FILL时有效。
e[4] 为使用e[2]和e[1]综合效果,虚线并圆弧连接。
e[5] 为使用e[3]和e[1]综合效果,自定义虚线并圆弧连接。

绘制代码如下:
 @Override protected void onDraw(Canvas canvas) {
            canvas.drawColor(Color.WHITE);

            RectF bounds = new RectF();
            mPath.computeBounds(bounds, false);//计算path的区域,并将结果输出给bounds
            canvas.translate(10 - bounds.left, 10 - bounds.top);

            makeEffects(mEffects, mPhase);
            mPhase += 1;
            invalidate();

            for (int i = 0; i < mEffects.length; i++) {
                mPaint.setPathEffect(mEffects[i]);
                mPaint.setColor(mColors[i]);
                canvas.drawPath(mPath, mPaint);
                canvas.translate(0, 28);
            }
        }
mPhase 指定的是虚线上虚实偏移,每次加1,相当于交换虚处和实处的位置,而invalidate()将再次出发onDraw ,这样虚实不断变换给人以动画的效果。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值