Периодически рисовать путь с помощью android холста - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь создать аналоговый вид часов, я успешно рисую лицевую панель и отметки часов и минут / секунд, проблема, с которой я столкнулся, заключается в том, что когда я пытаюсь рисовать секундную стрелку каждую секунду (из 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 из потока пользовательского интерфейса, но все равно результата нет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...