Я пытаюсь создать аналоговый вид часов, я успешно рисую лицевую панель и отметки часов и минут / секунд, проблема, с которой я столкнулся, заключается в том, что когда я пытаюсь рисовать секундную стрелку каждую секунду (из TimerTask), это просто не появляются, но когда я вручную добавляю вторую руку в любом месте, она отображается правильно, поэтому мне кажется, что по какой-то причине, когда я пытаюсь работать с холстом после задержки, она ничего не делает.
Это мой таймер
private fun startSecondsTimer() {
secondsTimerTask?.cancel()
secondsTimerTask = object : TimerTask() {
override fun run() {
uiHandler.post{
if(seconds == 45){
seconds = -15
}else{
seconds += 1
}
drawSecondHand(seconds)
}
}
}
secondsTimer.scheduleAtFixedRate(
secondsTimerTask,
TimeUnit.SECONDS.toMillis(1),
TimeUnit.SECONDS.toMillis(1)
)
}
Это метод отрисовки
private fun drawSecondHand(secondsPosition: Int) {
//cx, cy is the center position of the clock
sPath.moveTo(cx,cy)
val angle = ((360 / 60) * secondsPosition).toDouble()
val xDestination = calculateX(angle, 40)
val yDestination = calculateY(angle, 40)
Log.d("LogTag", "seconds hand at: $secondsPosition XDes: $xDestination, YDes: $yDestination")
sPath.lineTo(xDestination, yDestination)
mCanvas.drawPath(sPath, sPaint)
}
Инициализация рисования
private fun initSecondsHand(){
sPaint.style = Paint.Style.STROKE
sPaint.color = Color.BLACK
sPaint.isAntiAlias = true
sPaint.strokeWidth = 4f
}
Как вы видите, я вызываю функцию drawSeconds из потока пользовательского интерфейса, но все равно результата нет