android - 按钮动画(带有 ClipDrawable 的 TimeAnimator)无法正常工作
问题描述
我想通过从左到右填充来为按钮背景设置动画。我用这个。当我把它放进去时它可以正常工作,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)
}
}
请帮忙
解决方案
我已经调查过了!那里的实现很好,只有你不应该使用
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()
}
}
现在,因为这个选项有一个动画师,无论是正确还是不正确,它都会被播放。
推荐阅读
- javascript - 箭头运算符不返回函数
- mysql - MySQL 多级层次结构列表
- angularjs - 一起获取 Firestore 集合和子集合文档数据
- react-native - TypeError: undefined is not an object (评估'_this.props.navigation')
- php - 为什么将 PHP 脚本添加到 sudoers 文件不起作用?
- python-3.x - 为什么 df[0] 在连接后没有返回第一列以及如何使用 ohe.categories_?
- jquery - jQuery 触发选择元素以显示选项
- python - 从列表中查找匹配的值
- javascript - 用户为空最后一条消息为空
- javascript - 为什么 ace 编辑器不发出 tokenizerUpdate 事件