怎么利用Jetpack Compose实现绘制五角星效果
发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,本文小编为大家详细介绍"怎么利用Jetpack Compose实现绘制五角星效果",内容详细,步骤清晰,细节处理妥当,希望这篇"怎么利用Jetpack Compose实现绘制五角星效果"文章能帮助大家
千家信息网最后更新 2025年01月16日怎么利用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安全错误
数据库的锁怎样保障安全
我的世界进服务器
网络安全的4个基本目标
客户现有服务器存储空间不足
网络安全证考什么意思
lenovo服务器管理地址
微信红包计算软件开发
服务器的系统管理打不开
网络安全产业发展态势与展望
一般服务器架构
软件开发初级工程师
软件开发公司www
爱今天无法连接服务器
数据库为什么所以
查课表软件开发
街道网络安全总结报告
pdms怎样共用一个数据库
什么是系统和数据库
湖北邮箱提取外贸软件开发
天风数据库
高青网络审批软件开发公司
数据库int 最高几位
web服务器怎样部署
数据库设计书籍有哪些
云南pdu服务器电源供应商
华为服务器自研架构
暗黑2重制版各服务器价格
vps开我的世界服务器
服务器网卡能用万能驱动吗
道路存储数据库
网络安全有专兼职人员