#android #kotlin
#Android #kotlin
Вопрос:
Я пытаюсь создать приложение RNG и хочу отключить мою кнопку, пока работает моя анимация. Это не должно быть слишком сложно, потому что я новичок в разработке Kotlin-приложений.после задержки происходит сбой.
Я уже пробовал другие способы с моей анимацией и попробовал setEnable ().
button_randomize.setOnClickListener {
textView_Number.text = (minRangeRandom..maxRangeRandom).shuffled().first().toString()
textView_Number.animate().setDuration(500).rotationBy(360f)
Timer().schedule(object: TimerTask(){
override fun run() {
button_randomize.isEnabled = false
}
},500)
button_randomize.isEnabled = true
}
Я ожидаю, что кнопка рандомизации отключена до завершения анимации. В настоящее время он выходит из строя по завершении задержки.
Комментарии:
1. Журнал сбоев помог бы..
2. попробуйте использовать
View.postDelayed
на своей кнопке вместо таймера.
Ответ №1:
Вероятно, это потому, что Timer создает новый поток, и ваша TimerTask выполняется в этом новом потоке.
Однако платформа пользовательского интерфейса Android не поддерживает многопоточность. Свойства просмотра могут быть изменены только в основном потоке.
Чтобы исправить это, используйте другой способ задержки. При этом выполняется отложенный код в основном потоке:
button_randomize.isEnabled = true
button_randomize.postDelayed({
button_randomize.isEnabled = false
}, 500)
Комментарии:
1. Это способ синхронизировать анимацию с жестко запрограммированным обработчиком, это, безусловно, не очень хороший подход.
Ответ №2:
Попробуйте приведенный ниже код.
textView_Number.animate().setDuration(500).rotationBy(360f)
.withStartAction {
button_randomize.isEnabled = false
}.withEndAction {
button_randomize.isEnabled = true
}
Комментарии:
1. К сожалению, это не работает, но спасибо за ваше представление!
Ответ №3:
Вы можете добавить прослушиватель animator, чтобы знать, когда это закончится, вот так
textview_Number.animate().setDuration(500).rotationBy(360f).setListener(object : Animator.AnimatorListener {
override fun onAnimationRepeat(animation: Animator?) {}
override fun onAnimationCancel(animation: Animator?) {}
override fun onAnimationStart(animation: Animator?) {}
override fun onAnimationEnd(animation: Animator?) {
button_randomize.isEnabled = true
}
})
}