Paint.Join与Paint.Cap

Paint.Join

该类主要描述path的拐角处如何绘制

这里写图片描述


        private static class SampleView extends View {
            private Paint linePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
            private Paint mPaint1 = new Paint(Paint.ANTI_ALIAS_FLAG);
            private Paint mPaint2 = new Paint(Paint.ANTI_ALIAS_FLAG);
            private Paint mPaint3 = new Paint(Paint.ANTI_ALIAS_FLAG);
            private Path mPath1;
            private Path mPath2;
            private Path mPath3;

            public SampleView(Context context) {
                super(context);
                setFocusable(true);
                setFocusableInTouchMode(true);

                linePaint.setColor(Color.YELLOW);
                linePaint.setStyle(Style.STROKE);
                linePaint.setStrokeWidth(2);

                mPaint1.setStrokeJoin(Join.MITER);
                mPaint1.setStyle(Style.STROKE);
                mPaint1.setStrokeWidth(30);
                mPaint1.setColor(Color.BLUE);
                mPath1 = new Path();
                mPath1.moveTo(0, 100);  
                mPath1.lineTo(0, 0);  
                mPath1.lineTo(200, 0);  
                mPath1.lineTo(200, 100); 
                mPath1.lineTo(100, 50); 
//              mPath1.close();

                mPaint2.setStrokeJoin(Join.ROUND);
                mPaint2.setStyle(Style.STROKE);
                mPaint2.setStrokeWidth(30);
                mPaint2.setColor(Color.BLUE);
                mPath2 = new Path();
                mPath2.moveTo(0, 250);  
                mPath2.lineTo(0,150);  
                mPath2.lineTo(200,150);  
                mPath2.lineTo(200, 250);  
                mPath2.lineTo(100, 200);  
//              mPath2.close();

                mPaint3.setStrokeJoin(Join.BEVEL);
                mPaint3.setStyle(Style.STROKE);
                mPaint3.setStrokeWidth(30);
                mPaint3.setColor(Color.BLUE);
                mPath3 = new Path();
                mPath3.moveTo(0, 400);  
                mPath3.lineTo(0, 300);  
                mPath3.lineTo(200, 300);  
                mPath3.lineTo(200, 400);  
                mPath3.lineTo(100, 350);  

//              mPath3.close();
            }

            @Override protected void onDraw(Canvas canvas) {

                Paint paint = new Paint();
                paint.setAntiAlias(true);
                paint.setSubpixelText(true);

                canvas.drawColor(0xFFCCCCCC);
                canvas.translate(20, 20);

                canvas.drawPath(mPath1, mPaint1);
                canvas.drawPath(mPath1, linePaint);
                canvas.drawText("Join.MITER,尖锐的拐角连接", 0, 0, paint);

                canvas.drawPath(mPath2, mPaint2);
                canvas.drawPath(mPath2, linePaint);
                canvas.drawText("Join.ROUND,圆角的拐角连接", 0, 170, paint);


                canvas.drawPath(mPath3, mPaint3);
                canvas.drawPath(mPath3, linePaint);
                canvas.drawText("Join.BEVEL,斜角的拐角连接", 0, 340, paint);
            }
        }

Paint.Cap

该类主要描述在画笔开始和结束的地方如何绘制

这里写图片描述


private static class SampleView extends View {
        private Paint linePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        private Paint mPaint1 = new Paint(Paint.ANTI_ALIAS_FLAG);
        private Paint mPaint2 = new Paint(Paint.ANTI_ALIAS_FLAG);
        private Paint mPaint3 = new Paint(Paint.ANTI_ALIAS_FLAG);
        private Path mPath1;
        private Path mPath2;
        private Path mPath3;

        /*
         * LinearGradient shader = new LinearGradient(0, 0, endX, endY, new
         * int[]{startColor, midleColor, endColor},new float[]{0 , 0.5f, 1.0f},
         * TileMode.MIRROR); 参数一为渐变起初点坐标x位置,参数二为y轴位置,参数三和四分辨对应渐变终点 其中参数new
         * int[]{startColor, midleColor,endColor}是参与渐变效果的颜色集合, 其中参数new float[]{0
         * , 0.5f, 1.0f}是定义每个颜色处于的渐变相对位置, 这个参数可以为null,如果为null表示所有的颜色按顺序均匀的分布
         */
        Shader mShader = new LinearGradient(0, 0, 100, 100,

        new int[] { Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW }, null,
                Shader.TileMode.REPEAT);

        // Shader.TileMode三种模式
        // REPEAT:沿着渐变方向循环重复
        // CLAMP:如果在预先定义的范围外画的话,就重复边界的颜色
        // MIRROR:与REPEAT一样都是循环重复,但这个会对称重复

        public SampleView(Context context) {
            super(context);
            setFocusable(true);
            setFocusableInTouchMode(true);

            linePaint.setColor(Color.YELLOW);
            linePaint.setStyle(Style.STROKE);
            linePaint.setStrokeWidth(2);

            mPaint1.setStrokeCap(Cap.BUTT);
            mPaint1.setShader(mShader);// 用Shader中定义定义的颜色来话
            mPaint1.setStyle(Style.STROKE);
            mPaint1.setStrokeWidth(30);
            mPath1 = new Path();
            mPath1.moveTo(0, 0);
            mPath1.lineTo(0, 120);
            mPath1.lineTo(250, 0);
            // mPath1.close();

            mPaint2.setStrokeCap(Cap.ROUND);
            mPaint2.setShader(mShader);// 用Shader中定义定义的颜色来话
            mPaint2.setStyle(Style.STROKE);
            mPaint2.setStrokeWidth(30);
            mPath2 = new Path();
            mPath2.moveTo(0, 170);
            mPath2.lineTo(0, 290);
            mPath2.lineTo(250, 170);
            // mPath2.close();

            mPaint3.setStrokeCap(Cap.SQUARE);
            mPaint3.setShader(mShader);// 用Shader中定义定义的颜色来话
            mPaint3.setStyle(Style.STROKE);
            mPaint3.setStrokeWidth(30);
            mPath3 = new Path();
            mPath3.moveTo(0, 340);
            mPath3.lineTo(0, 470);
            mPath3.lineTo(250, 340);
            // mPath3.close();
        }

        @Override
        protected void onDraw(Canvas canvas) {

            Paint paint = new Paint();
            paint.setAntiAlias(true);
            paint.setSubpixelText(true);

            canvas.drawColor(0xFFCCCCCC);
            canvas.translate(20, 20);

            canvas.drawPath(mPath1, mPaint1);
            canvas.drawPath(mPath1, linePaint);
            canvas.drawText("Cap.BUTT,在path处结束,不超过任何距离", 0, 0, paint);

            canvas.drawPath(mPath2, mPaint2);
            canvas.drawPath(mPath2, linePaint);

            canvas.drawText("Cap.ROUND,超过path半个笔触,并以半圆绘制超出部分", 0, 170, paint);

            canvas.drawPath(mPath3, mPaint3);
            canvas.drawPath(mPath3, linePaint);

            canvas.drawText("Cap.SQUARE,超过path半个笔触,并以正方形绘制超出部分", 0, 340, paint);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值