怎么利用Jetpack Compose实现绘制五角星效果
发表于:2024-10-28 作者:千家信息网编辑
千家信息网最后更新 2024年10月28日,本文小编为大家详细介绍"怎么利用Jetpack Compose实现绘制五角星效果",内容详细,步骤清晰,细节处理妥当,希望这篇"怎么利用Jetpack Compose实现绘制五角星效果"文章能帮助大家
千家信息网最后更新 2024年10月28日怎么利用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安全错误
数据库的锁怎样保障安全
服务器硬盘同步
网络安全小报手抄报图片一年级
最新绣花软件开发破解版
梦三服务器未连接什么意思
宜宾网络安全周
如何避免数据库的连接陷阱
12306数据库数据表设计
松江区标准软件开发定制报价表
nba2k关服务器是什么意思
雄安网络安全会议
烟台大辰网络技术
网络安全蠕虫
网络技术4级
南阳服务器机柜价格
dnf韩服装备数据库
独秀属于中文数据库吗
宁津有做软件开发的吗
数据库生成代码
msdn网络安全
数据软件开发价格检测中心
网络技术计三教程
服务器搭建网站数据库
全文类数据库
宿迁互联网软件开发创新服务
江夏区海航网络安全维护收费标准
软件开发涉密信息系统集成资质
部落冲突维护服务器一般多长时间
游戏软件开发能赚钱么
怀化软件开发培训排行榜
阿里云云服务器的管理终端