前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >速读原著-Android应用开发入门教程(使用路径效果(PathEffect))

速读原著-Android应用开发入门教程(使用路径效果(PathEffect))

作者头像
cwl_java
发布2020-02-13 15:11:24
3420
发布2020-02-13 15:11:24
举报
文章被收录于专栏:cwl_Javacwl_Java

9.4 使用路径效果(PathEffect)

路径表示一条曲线,在 Android 中通过路径可以更灵活地实现一些效果。 参考示例程序:ApiDemo 的 PathEffects(ApiDemo=>Graphics=>PathEffects) 源代码:android/apis/graphics/PathEffects.java PathEffects 程序的运行结果如图所示:

在这里插入图片描述
在这里插入图片描述

图中的几个路径的曲线的基本走向一致,但是细节的方面各不相同,例如线的方式代码主要是实现了 SampleView,核心部分如下所示:

代码语言:javascript
复制
    private static class SampleView extends View {
        private Paint mPaint;
        private Path mPath;
        private PathEffect[] mEffects;
        private int[] mColors;
        private float mPhase;
        private static PathEffect makeDash(float phase) {
            return new DashPathEffect(new float[] { 15, 5, 8, 5 }, phase);
        }

        private static void makeEffects(PathEffect[] e, float phase) {
            e[0] = null; // 没有效果
            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]); // 组合路径效果
        }

        public SampleView(Context context) {
            super(context);
            setFocusable(true);
            setFocusableInTouchMode(true);
            mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
            mPaint.setStyle(Paint.Style.STROKE);
            mPaint.setStrokeWidth(6);
            mPath = makeFollowPath();
            mEffects = new PathEffect[6]; // 定义路径效果
            mColors = new int[] { Color.BLACK, Color.RED, Color.BLUE,
                    Color.GREEN, Color.MAGENTA, Color.BLACK
            };
        }
        @Override protected void onDraw(Canvas canvas) {
            canvas.drawColor(Color.WHITE);
            RectF bounds = new RectF();
            mPath.computeBounds(bounds, false);
            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);
            }
        }
        // 省略部分内容
    }

Path 是在 Android 中表示路径的类,路径可以理解成一条曲线,曲线可以由直线、圆弧等组成。

Android中提供了几种不同的绘制效果,PathEffect 是关于几何图形绘制的一个基类,它具有几个继承者:

代码语言:javascript
复制
ComposePathEffect, CornerPathEffect, DashPathEffect, DiscretePathEffect, PathDashPathEffect, SumPathEffect。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-01-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 9.4 使用路径效果(PathEffect)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档