You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:09:34