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

Android Canvas绘制平滑半圆异常:drawArc()方法代码问题排查

解决drawArc绘制半圆不符合预期的问题

嘿,我来帮你排查下这个drawArc画半圆的问题~你的代码里有几个关键地方可能导致效果不对,咱们逐个分析:

1. 最核心的问题:useCenter参数误用

你把drawArc的第四个参数设成了true,这个参数的作用是是否将弧线的两个端点和圆心连接起来,形成闭合的扇形。如果你想要的是平滑的半圆弧线(没有两条半径的那种),必须把这个参数改成false!

修改后的核心代码:

RectF oval = new RectF(x - cornerRadius, y - cornerRadius, x + cornerRadius, y + cornerRadius);
// 把第四个参数从true改成false
canvas.drawArc(oval, start, 180, false, cornerPaint);

2. 起始角度start是否符合你的预期

Android里drawArc的角度规则是:以3点钟方向为0度,角度值顺时针递增。如果你的start角度设置不对,半圆的位置会跑偏:

  • 想要上半圆?设start = 180,扫过180度
  • 想要下半圆?设start = 0,扫过180度
  • 想要左半圆?设start = 90,扫过180度
  • 想要右半圆?设start = 270,扫过180度

3. Paint的样式是否适配需求

别忘了检查你的cornerPaint设置:

  • 如果要画线条状的半圆:必须设置cornerPaint.setStyle(Paint.Style.STROKE),还能通过setStrokeWidth()调整线条粗细;
  • 如果要画实心半圆区域:那useCenter = true是对的,但要确保Paint的样式是FILL或FILL_AND_STROKE。

4. RectF的范围是正确的

你的RectF构造没问题,以(x,y)为圆心,cornerRadius为半径的正圆范围,这样画出来的半圆不会被拉伸变形,这点可以放心~

内容的提问来源于stack exchange,提问作者Dmitry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 12:57:27