怎么利用Jetpack Compose实现绘制五角星效果
发表于:2025-02-20 作者:千家信息网编辑
千家信息网最后更新 2025年02月20日,本文小编为大家详细介绍"怎么利用Jetpack Compose实现绘制五角星效果",内容详细,步骤清晰,细节处理妥当,希望这篇"怎么利用Jetpack Compose实现绘制五角星效果"文章能帮助大家
千家信息网最后更新 2025年02月20日怎么利用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安全错误
数据库的锁怎样保障安全
软件开发个体工商户
梦幻西游怎样查服务器状态
java 数据库表对象
网络安全五行属什么行业
40岁学什么网络技术
希尔顿酒店网络技术
网络安全高手视频
魔兽世界测试服战网修改国服务器
合肥晶弘电器软件开发
仪陇网络安全宣传活动
贵池区新能源软件开发服务商家
数据库线程定位语句
个体户用什么软件开发票
qt 历史表格 数据库
网络安全工程师往哪个方面发展
北京哪里有软件开发企业
网络安全宣传 好的标题
学电脑软件开发技术学费多少
天津常用软件开发成本价
深圳龙图软件开发有限公司
徐州多功能软件开发设计规范
临清电力监控软件开发
洛阳西美网络技术服务有限公司
钱包掉服务器怎么办
hp服务器驱动下载
汉寿学软件开发
服务端数据库前端连接原理
能在家建个服务器吗
鞍山教育网服务器登录不上去
戴尔服务器电源引脚参数