按钮动画(带 ClipDrawable 的 TimeAnimator)无法正常工作
Button Animation (TimeAnimator with ClipDrawable) doesn't work properly
我想通过从左到右填充按钮背景来制作动画。我使用 。当我把它放在 onCreate
中时,它工作正常,但当用户 select 在我的测验中给出正确答案时,我需要为按钮设置动画。
这是我的 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)
}
}
求求你帮忙
我已经调查了 !。那里的实现很好,只是你不应该使用
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 设置将在下次单击相同按钮时生效
如果您只想在按下任何回答按钮时播放动画。您需要 在设置答案文本选项时设置动画 views/buttons
下面的代码可以给你一个想法
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()
}
}
现在因为这个选项有一个动画师,无论是正确的还是不正确的,它都会被播放。
我想通过从左到右填充按钮背景来制作动画。我使用 onCreate
中时,它工作正常,但当用户 select 在我的测验中给出正确答案时,我需要为按钮设置动画。
这是我的 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)
}
}
求求你帮忙
我已经调查了
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 设置将在下次单击相同按钮时生效
如果您只想在按下任何回答按钮时播放动画。您需要 在设置答案文本选项时设置动画 views/buttons
下面的代码可以给你一个想法
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()
}
}
现在因为这个选项有一个动画师,无论是正确的还是不正确的,它都会被播放。