我正在開發一個 GPS 航點應用程式。我已經開始繪制我的指南針,但我發現很難在圓圈周圍實作度數文本。任何人都可以幫助我解決問題嗎?指南針影像正在處理] 1這里顯示了我繪制的指南針的圓圈。
這里的影像顯示了我想要實作的目標,即圍繞羅盤實作度數文本 [我想要實作的目標的影像] 2
uj5u.com熱心網友回復:
假設您在自定義視圖中執行此操作,您需要使用傳入的drawText方法之一。CanvasonDraw
你必須做一點三角學來獲得x, y文本的位置 - 基本上,如果有一個半徑為r的圓,你將放置文本原點(即它們離中心多遠),并且你正在放置角度為θ 的一個:
x = r * cosθ
y = r * sinθ
該sin和cos功能采取弧度值,所以你必須要轉換的是如果你使用度:
val radians = (degrees.toDouble() / 360.0) * (2.0 * Math.PI)
和0度是在圓上,而不是12月3點左右,所以你必須從你平時的指南針位置減去90度(例如,90羅盤度是在區域坐標0度)。您得到的負值很好,-90 與 270 相同。如果您嘗試復制您發布的影像(其中數字和其他所有內容都在旋轉,而指標停留在頂部),則必須應用反正角度偏移!
這些x和y值是距圓心的距離,圓心可能需要是您視圖的中心(您可能已經計算出來繪制圓)。您還需要考慮繪制這些標簽所需的額外空間,縮放所有內容以使其適合View
uj5u.com熱心網友回復:
謝謝您的答復。請看看我做了什么,但似乎不起作用。請幫我檢查我的代碼。下面是我的代碼:
private val numbers = intArrayOf(30 , 60 , 90 , 120 , 150 , 180 , 210 , 240 , 270 , 300 , 330 , 0)
//I called the drawDegree function in my onDraw function
private fun drawDegree(canvas: Canvas) {
paint!!.textSize = fontSize.toFloat()
for (number in numbers) {
val tmp = number.toString()
paint!!.getTextBounds(tmp , 0 , tmp.length , rect)
val angle = Math.PI / 360
val x = (width / 2 Math.cos(angle) * radius * 0.7f - rect.width() / 2 200).toInt()
val y = (height / 2 Math.sin(angle) * radius * 0.7f rect.height() / 2 200).toInt()
canvas.drawText(tmp , x.toFloat() , y.toFloat() , paint!!)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/376201.html
標籤:科特林
