我制作了某种测验应用程序,我希望每次点击答案按钮时都会有一个变为黄色的动画。 0.25 秒后会出现下一个问题(我希望它变回旧颜色)
我已经在这里做了:
public void onClick(View v) {
x
for (int i = 0; i < 4; i++) {
if(v == answerButtons[i]){
int j = i;
ValueAnimator valueAnimator = new ValueAnimator();
valueAnimator.setDuration(250);
valueAnimator.setEvaluator(new ArgbEvaluator());
valueAnimator.setIntValues(Color.WHITE,Color.YELLOW);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
answerButtons[j].setBackgroundColor((int)valueAnimator.getAnimatedValue());
}
});
valueAnimator.start();
((MainActivity)getActivity()).num++;
}
}
它确实改变了颜色,但紧接着下一个答案(和问题)支持出现在相同的按钮上。 我试过这个:
for (int i = 0; i < 4; i++) {
if(v == answerButtons[i]){
int j = i;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
answerButtons[j].setBackgroundColor(Color.rgb(63, 81, 181));
Toast.makeText(getActivity(), "Just changed color to: button "+(j+1), Toast.LENGTH_SHORT).show();
//display(questions.get(((MainActivity)getActivity()).num));
}
},250);
}
}
x
}
但它通常不起作用,有时确实如此。知道为什么它每次都不起作用吗? (它唯一不做的就是改变颜色)
答案 0 :(得分:2)
我得到了一个解决方案:) 显然 postDelay 函数不是那么精确..
int j = i;
ValueAnimator valueAnimator = new ValueAnimator();
valueAnimator.setDuration(250);
valueAnimator.setEvaluator(new ArgbEvaluator());
valueAnimator.setIntValues(Color.WHITE,Color.YELLOW);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
answerButtons[j].setBackgroundColor((int)valueAnimator.getAnimatedValue());
}
});
valueAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
answerButtons[j].setBackgroundColor(Color.parseColor("#3F51B5"));
display(questions.get(((MainActivity)getActivity()).num));
}
});
valueAnimator.start();