<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
compose中我們的所有ui操作,包括一些行為,例如:點選、手勢等都需要使用Modifier來進行操作。因此對Modifier的理解可以幫助我們解決很多問題的
本文我們打算自定義一個Modifier,通過這個modifier我們可以實現用一個操作符就畫出五角星的效果
我們實現繪製五角星的原理如下圖,首先我們會虛構兩個圓,將內圓和外圓角度平分五份,然後依次連線內圓和外圓的切點的座標,然後使用path繪製完成。
程式碼中的實現涉及到自定義繪製,難度並不大。需要注意的點:
fun Modifier.customDraw( color: Color, starCount: Int = 5, checked: Boolean = false, ) = this.then(CustomDrawModifier(color, starCount, checked = checked)) class CustomDrawModifier( private val color: Color, private val 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實現繪製五角星效果的詳細內容,更多關於Jetpack Compose五角星的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45