自定义view - 画弧线填充描边与使用中心

本文详细介绍了在绘图中如何使用不同画笔样式实现描边、填充及二者结合的效果,并通过实例展示了不同样式在圆形和弧形绘制上的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设置画笔样式的时候是这样的:

mPaint.setStyle(Paint.Style.FILL);
//设置画笔模式为填充

实际上画笔有三种模式,如下:

STROKE                //描边
FILL                  //填充
FILL_AND_STROKE       //描边加填充
Paint paint = new Paint();
paint.setColor(Color.BLUE);
paint.setStrokeWidth(40);     //为了实验效果明显,特地设置描边宽度非常大

// 描边
paint.setStyle(Paint.Style.STROKE);
canvas.drawCircle(200,200,100,paint);

// 填充
paint.setStyle(Paint.Style.FILL);
canvas.drawCircle(200,500,100,paint);

// 描边加填充
paint.setStyle(Paint.Style.FILL_AND_STROKE);
canvas.drawCircle(200, 800, 100, paint);

由图可以看出,填充是内容,描边是边界。描边的宽度向外扩展。

画弧线的对比

注意:顺时针方向为角度正方向

        paint.setStyle(Paint.Style.STROKE);//描边
        RectF rectF1 = new RectF(100f, 100f, 500f, 300f);
        canvas.drawArc(rectF1, 270, 90, false, paint);//不用中心

        paint.setStyle(Paint.Style.STROKE);//描边
        RectF rectF2 = new RectF(100f, 300f, 500f, 500f);
        canvas.drawArc(rectF2, 270, 90, true, paint);//用中心

        paint.setStyle(Paint.Style.FILL);//填充
        RectF rectF3 = new RectF(100f, 500f, 500f, 700f);
        canvas.drawArc(rectF3, 270, 90, false, paint);//不用中心

        paint.setStyle(Paint.Style.FILL);//填充
        RectF rectF4 = new RectF(100f, 700f, 500f, 900f);
        canvas.drawArc(rectF4, 270, 90, true, paint);//用中心

        paint.setStyle(Paint.Style.FILL_AND_STROKE);//描边加填充
        RectF rectF5 = new RectF(100f, 900f, 500f, 1100f);
        canvas.drawArc(rectF5, 270, 90, false, paint);//不用中心

        paint.setStyle(Paint.Style.FILL_AND_STROKE);//描边加填充
        RectF rectF6 = new RectF(100f, 1100f, 500f, 1300f);
        canvas.drawArc(rectF6, 270, 90, true, paint);//用中心

效果图:

这里写图片描述


实心文字:

    textPaint.setStyle(Paint.Style.FILL);

这里写图片描述

空心文字:

    textPaint.setStyle(Paint.Style.STROKE);

这里写图片描述


描边,不用中心

mPaint.setStyle(Paint.Style.STROKE);//描边
canvas.drawArc(rectF3,270,90,false,mPaint);//用中心

Markdown

描边,用中心

mPaint.setStyle(Paint.Style.STROKE);//描边
canvas.drawArc(rectF3,270,90,true,mPaint);//用中心

Markdown

填充,不用中心

mPaint.setStyle(Paint.Style.FILL);//填充
canvas.drawArc(rectF3,270,90,false,mPaint);//用中心

Markdown

填充,用中心

mPaint.setStyle(Paint.Style.FILL);//填充
canvas.drawArc(rectF3,270,90,true,mPaint);//用中心

Markdown

填充描边,不用中心

 mPaint.setStyle(Paint.Style.FILL_AND_STROKE);//描边填充
 canvas.drawArc(rectF3,270,90,false,mPaint);//不用中心

Markdown

填充描边,用中心

mPaint.setStyle(Paint.Style.FILL_AND_STROKE);//描边填充
canvas.drawArc(rectF3,270,90,true,mPaint);//不用中心

Markdown

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值