怎么利用Jetpack Compose实现绘制五角星效果
发表于:2025-11-06 作者:千家信息网编辑
千家信息网最后更新 2025年11月06日,本文小编为大家详细介绍"怎么利用Jetpack Compose实现绘制五角星效果",内容详细,步骤清晰,细节处理妥当,希望这篇"怎么利用Jetpack Compose实现绘制五角星效果"文章能帮助大家
千家信息网最后更新 2025年11月06日怎么利用Jetpack Compose实现绘制五角星效果
本文小编为大家详细介绍"怎么利用Jetpack Compose实现绘制五角星效果",内容详细,步骤清晰,细节处理妥当,希望这篇"怎么利用Jetpack Compose实现绘制五角星效果"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
原理
我们实现绘制五角星的原理如下图,首先我们会虚构两个圆,将内圆和外圆角度平分五份,然后依次连接内圆和外圆的切点的坐标,然后使用path绘制完成。
实现
代码中的实现涉及到自定义绘制,难度并不大。需要注意的点:
composse中角度的锚点是弧度(Math.PI)、而原生的锚点是角度(360)
默认的原点在左上角,我们绘制的时候需要主动移动到组合的中心点
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安全错误
数据库的锁怎样保障安全
黑龙江医疗器械数据库
数据库与mysql关系
江苏前端软件开发靠谱吗
网络安全体系的安全服务
商业企业软件开发账务处理
2008r2数据库实例
考研小作文模板数据库
lol进入服务器异常
网络安全整体方案
软件开发培训的质量
互联网企业是科技企业
亿伯斯网络技术
曾国藩日记软件开发
软件开发要求数学
初中生与网络安全
新建数据库视图
2b2t服务器的名称
软件开发核心技术指标是什么
虚拟服务器远程桌面
软件开发面试时hr说我话少
上海云主机服务器供货厂
mimic数据库考试
网络技术知识试题
软件开发申报
怎么远程给服务器杀毒
暗黑2亚洲服务器什么时候更新
成都摩宝网络技术公司
网络安全需要的软件
互联网最科技前沿公司
关于网络云计算型服务器网卡模式