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

Android如何使用Canvas绘制带椭圆侧边(半圆底边)的正方形

Android Canvas绘制带椭圆/半圆侧边正方形实现方案

核心实现逻辑是通过Path组合直边与圆弧路径,不需要拼接多个图形,绘制效率高,弧度参数可灵活调整。

  • 基础参数定义
    先确定正方形的边长尺寸,以及侧边圆弧的凸起高度:如果需要底边是标准半圆形,圆弧高度直接设为正方形边长的1/2即可;如果需要椭圆弧度的侧边,按需调整圆弧高度值,数值越大弧度越突出,数值越小弧度越平缓。
  • 路径构建逻辑
    按顺序拼接路径即可:从正方形左上角为起点,依次绘制顶边直线到右上角、右侧直边到右下角,接着绘制连接右下角到左下角的下凸圆弧,最后闭合路径完成整体图形轮廓。
    圆弧绘制需要提前定义圆弧所属椭圆的外接矩形:矩形宽度和正方形边长保持一致,高度为2倍圆弧高度,矩形顶边与正方形底边对齐,即可保证圆弧两端刚好和正方形两个底角完美衔接,不会出现错位、缺口问题。
  • 可直接复用的代码示例
    以下是自定义View中onDraw方法内的实现代码:
override fun onDraw(canvas: Canvas) {
    super.onDraw(canvas)
    // 初始化画笔,开启抗锯齿
    val drawPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
        color = Color.WHITE // 替换为实际需要的填充色
        style = Paint.Style.FILL
    }

    val shapePath = Path()
    val contentWidth = width.toFloat()
    val contentHeight = height.toFloat()
    // 圆弧高度,正半圆场景取值为contentWidth / 2f
    val arcHeight = contentWidth / 2f

    // 移动到图形左上角起点
    shapePath.moveTo(0f, 0f)
    // 绘制顶部直边到右上角
    shapePath.lineTo(contentWidth, 0f)
    // 绘制右侧直边到右下角点
    shapePath.lineTo(contentWidth, contentHeight - arcHeight)
    // 定义圆弧对应的椭圆外接矩形
    val arcBounds = RectF(
        0f,
        contentHeight - arcHeight * 2,
        contentWidth,
        contentHeight
    )
    // 绘制180度下凸圆弧,从右下角连接到左下角
    shapePath.arcTo(arcBounds, 0f, 180f)
    // 闭合路径完成整体轮廓
    shapePath.close()

    canvas.drawPath(shapePath, drawPaint)
}

注意事项:如果需要给其他边添加椭圆/半圆侧边,只需要调整圆弧外接矩形的位置、圆弧起始角度和扫描角度即可,不需要引入第三方依赖。如果需要给图形加描边,只需要给Paint设置对应的描边宽度和描边颜色即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:45:42