我想通过从左到右填充按钮背景来制作动画。我用this 。当我将其放在onCreate
中时,它可以正常工作,但是当用户在测验中选择正确的答案时,我需要设置动画按钮。这是我的checkAnswer方法
fun checkAnswer(selectedAnswer: Button) {
enableAnswersButton(false)
if (selectedAnswer.text.toString() == listOfTests[currentQuestion].rightAnswer){
val layerDrawable = selectedAnswer.background as LayerDrawable
mClipDrawable =
layerDrawable.findDrawableByLayerId(R.id.clip_drawable_false) as ClipDrawable
mAnimator = TimeAnimator()
mAnimator!!.setTimeListener(this)
selectedAnswer.setOnClickListener {
if (!mAnimator!!.isRunning) {
mCurrentLevel = 0;
mAnimator!!.start()
}
}
} else {
val layerDrawable = selectedAnswer.background as LayerDrawable
mClipDrawable =
layerDrawable.findDrawableByLayerId(R.id.clip_drawable_true) as ClipDrawable
mAnimator = TimeAnimator()
mAnimator!!.setTimeListener(this)
selectedAnswer.setOnClickListener {
if (!mAnimator!!.isRunning) {
mCurrentLevel = 0;
mAnimator!!.start()
}
}
问题是动画不时起作用。有时onTimeUpdate
方法不被调用,动画不起作用。
override fun onTimeUpdate(animation: TimeAnimator?, totalTime: Long, deltaTime: Long) {
mClipDrawable!!.level = mCurrentLevel
if (mCurrentLevel >= MAX_LEVEL) {
mAnimator!!.cancel()
} else {
mCurrentLevel = min(MAX_LEVEL, mCurrentLevel + LEVEL_INCREMENT)
}
}
请帮助
我已经调查了this !。实现很好,只有您不应该使用
selectedAnswer.setOnClickListener {//<===this part need to be removed as its setting onClick which will work if next time same button is clicked
if (!mAnimator!!.isRunning) {
mCurrentLevel = 0;
mAnimator!!.start()
}
}
需要删除该部分作为其onClick设置,如果下次单击同一按钮,它将起作用。
如果您只想在按下任何接听按钮时播放动画。您需要在答案文本视图/按钮上设置选项时设置动画师
下面的代码可以给您一个想法
firstOptionTextView.setText(Put the Option here); if (firstOptionTextView.text.toString() == listOfTests[currentQuestion].rightAnswer){ val layerDrawable = selectedAnswer.background as LayerDrawable mClipDrawable = layerDrawable.findDrawableByLayerId(R.id.clip_drawable_false) as ClipDrawable mAnimator = TimeAnimator() mAnimator!!.setTimeListener(this) firstOptionTextView.setOnClickListener { if (!mAnimator!!.isRunning) { mCurrentLevel = 0; mAnimator!!.start() } } } else { val layerDrawable = selectedAnswer.background as LayerDrawable mClipDrawable = layerDrawable.findDrawableByLayerId(R.id.clip_drawable_true) as ClipDrawable mAnimator = TimeAnimator() mAnimator!!.setTimeListener(this) firstOptionTextView.setOnClickListener { if (!mAnimator!!.isRunning) { mCurrentLevel = 0; mAnimator!!.start() } }
现在,由于此选项具有动画器,所以将播放正确或不正确的动画。