千家信息网

怎么利用Jetpack Compose实现绘制五角星效果

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本文小编为大家详细介绍"怎么利用Jetpack Compose实现绘制五角星效果",内容详细,步骤清晰,细节处理妥当,希望这篇"怎么利用Jetpack Compose实现绘制五角星效果"文章能帮助大家
千家信息网最后更新 2026年10月31日怎么利用Jetpack Compose实现绘制五角星效果

本文小编为大家详细介绍"怎么利用Jetpack Compose实现绘制五角星效果",内容详细,步骤清晰,细节处理妥当,希望这篇"怎么利用Jetpack Compose实现绘制五角星效果"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

    原理

    我们实现绘制五角星的原理如下图,首先我们会虚构两个圆,将内圆和外圆角度平分五份,然后依次连接内圆和外圆的切点的坐标,然后使用path绘制完成。

    实现

    代码中的实现涉及到自定义绘制,难度并不大。需要注意的点:

    1. composse中角度的锚点是弧度(Math.PI)、而原生的锚点是角度(360)

    2. 默认的原点在左上角,我们绘制的时候需要主动移动到组合的中心点

    3. path的绘制使用Fill可以填充闭合路径图形,使用Stroke可以绘制线性闭合路径图形

    代码

    fun Modifier.customDraw(    color: Color,    starCount: Int = 5,    checked: Boolean = false,) =    this.then(CustomDrawModifier(color, starCount, checked = checked))class CustomDrawModifier(    privateval color: Color,    privateval starCount: Int = 5,//星的数量    private var checked: Boolean = false,) :    DrawModifier {    override fun ContentDrawScope.draw() {        log("$size")        val radiusOuter = if (size.width > size.height) size.height / 2 else size.width / 2 //五角星外圆径        val radiusInner = radiusOuter / 2 //五角星内圆半径        val startAngle = (-Math.PI / 2).toFloat() //开始绘制点的外径角度        val perAngle = (2 * Math.PI / starCount).toFloat() //两个五角星两个角直接的角度差        val outAngles = (0 until starCount).map {            val angle = it * perAngle + startAngle            Offset(radiusOuter * cos(angle), radiusOuter * sin(angle))        }//所有外圆角的顶点        val innerAngles = (0 until starCount).map {            val angle = it * perAngle + perAngle / 2 + startAngle            Offset(radiusInner * cos(angle), radiusInner * sin(angle))        }//所有内圆角的顶点        val path = Path()//绘制五角星的所有内圆外圆的点连接线        (0 until starCount).forEachIndexed { index, _ ->            val outerX = outAngles[index].x            val outerY = outAngles[index].y            val innerX = innerAngles[index].x            val innerY = innerAngles[index].y//            drawCircle(Color.Red, radius = 3f, center = outAngles[index])//            drawCircle(Color.Yellow, radius = 3f, center = innerAngles[index])            if (index == 0) {                path.moveTo(outerX, outerY)                path.lineTo(innerX, innerY)                path.lineTo(outAngles[(index + 1) % starCount].x,                    outAngles[(index + 1) % starCount].y)            } else {                path.lineTo(innerX, innerY)//移动到内圆角的端点                path.lineTo(outAngles[(index + 1) % starCount].x,                    outAngles[(index + 1) % starCount].y)//连接到下一个外圆角的端点            }            if (index == starCount - 1) {                path.close()            }        }        translate(size.width / 2, size.height / 2) {            drawPath(path, color, style = if (checked) Fill else Stroke(width = 5f))        }    }}

    最终实现效果

    读到这里,这篇"怎么利用Jetpack Compose实现绘制五角星效果"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

    五角星 五角 角度 效果 内圆 圆角 两个 文章 代码 内容 原理 图形 端点 路径 顶点 移动 闭合 妥当 主动 不大 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海喔噻互联网科技有限公司 百单网互联网科技有限公司怎么样 广州紫鲸互联网科技有限公司 工业互联网科技新基建 互联网科技卖菜 互联网金融 科技金融 互联网科技集团 狮子座互联网科技 致骋互联网科技 江苏南京365互联网科技 随着互联网科技发展 银川新华互联网科技职业技术培训学校图片 现代互联网科技股 互联网为啥属于高科技 互联网公司科技股 互联网新科技动漫ppt素材 高科技互联网套路 电子商务与互联网科技的关系 云南互联网科技学费 如何强化互联网金融科技 湖南永感互联网科技有限公司 互联网科技公司的优势 金融科技创新监管互联网金融 互联网科技作文 贷财互联网科技 国外互联网科技网站 贵州叶脉互联网科技有限公司所属行业 洛阳昕诺飞互联网科技有限公司 四川慕妮娅互联网科技有限公司 东风日产互联网科技公司叫什么
    0