Android中如何创建黑边白心的小型弧形?附尝试代码
实现黑色边框、中间白色的小弧形
我明白你想要的是那种边缘为黑色、中间填充白色的小弧形效果,你之前用Paint.Style.STROKE的方式没达到预期,是因为STROKE只能绘制空心线条,没法实现“边框+填充”的弧形结构。咱们可以用双层绘制的思路来解决这个问题:
核心思路
先画一个较粗的黑色弧形作为外层边框的基础,再在同一中心位置画一个半径更小的白色弧形,覆盖掉中间区域,这样就形成了黑色边框包裹白色内部的弧形效果。
完整可运行代码示例
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int centerX = 200; // 弧形中心X坐标 int centerY = 200; // 弧形中心Y坐标 int borderWidth = 20;// 黑色边框的宽度 int outerRadius = 100;// 外层黑色弧形的半径 int innerRadius = outerRadius - borderWidth;// 内层白色弧形的半径 // 初始化黑色画笔(绘制外层边框) Paint blackPaint = new Paint(); blackPaint.setStyle(Paint.Style.FILL); blackPaint.setColor(Color.BLACK); blackPaint.setAntiAlias(true); // 开启抗锯齿,让边缘更平滑 // 初始化白色画笔(填充中间区域) Paint whitePaint = new Paint(); whitePaint.setStyle(Paint.Style.FILL); whitePaint.setColor(Color.WHITE); whitePaint.setAntiAlias(true); // 绘制外层黑色弧形(这里以90度的四分之一扇形为例) canvas.drawArc( centerX - outerRadius, centerY - outerRadius, centerX + outerRadius, centerY + outerRadius, 0, // 弧形起始角度(0度为3点钟方向) 90, // 弧形扫过的角度 true, // 是否闭合为扇形(false则是开放弧形) blackPaint ); // 绘制内层白色弧形,覆盖中间区域 canvas.drawArc( centerX - innerRadius, centerY - innerRadius, centerX + innerRadius, centerY + innerRadius, 0, 90, true, whitePaint ); }
关键细节说明
- 抗锯齿设置:
setAntiAlias(true)能让弧形边缘更平滑,避免出现锯齿状,提升视觉效果; - 半径关系:内层白色弧形的半径必须等于外层黑色弧形的半径减去边框宽度,这样才能保证黑色边框的宽度均匀一致;
- 开放弧形调整:如果你想要的是不闭合的开放弧形(比如只有弧形线条,没有两端的直线),只需要把
drawArc的最后一个参数useCenter改成false即可,注意两层弧形的起始、扫过角度要保持一致; - 灵活调整:你可以通过修改
borderWidth、outerRadius以及角度参数,来适配不同大小、不同弧度的需求。
内容的提问来源于stack exchange,提问作者Puja Singh
相关产品推荐
相关产品推荐

