我已经搜索了Stack Overflow,但我找不到正确的答案。
我目前正在Android Studio中编写一个测验应用程序,无论答案是否正确,我都会遇到闪烁的按钮。 如果答案是正确的,它应该闪烁绿色,如果答案不正确,它应该闪烁红色。
这是我的答案按钮之一:
<Button
android:id="@+id/choice1"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginBottom="24dp"
android:fontFamily="@font/aldrich"
android:padding="8dp"
android:textColor="#fff"
android:background="@drawable/rounded_button"/>
有了这样的背景:
<solid android:color="#eeffffff" />
<corners android:bottomRightRadius="12dp"
android:bottomLeftRadius="12dp"
android:topRightRadius="12dp"
android:topLeftRadius="12dp"/>
要查看答案,请使用此onlickListener:
mButtonChoice1.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view) {
if (mButtonChoice1.getText() == mAnswer) {
blinkEffectGreen1();
Toast.makeText(QuizActivity.this,"Richtig!",
Toast.LENGTH_SHORT).show();
}
else {
blinkEffectRed1();
Toast.makeText(QuizActivity.this, "Falsch," + " richtig
wäre " + mAnswer + " gewesen", Toast.LENGTH_SHORT).show();
}
mButtonChoice1.setBackgroundResource(R.drawable.rounded_button);
updateQuestion();
}
});
我尝试使用mButtonChoice1.setBackgroundResource(R.drawable.rounded_button);再次将按钮整形,因为我的闪烁方法在闪烁时将其塑造成矩形。
我的blinkEffect方法如下所示:
private void blinkEffectRed1(){
ObjectAnimator animator = ObjectAnimator.ofInt(mButtonChoice1,
"backgroundColor", Color.RED , Color.parseColor(("#ff669900")));
animator.setDuration(250);
animator.setEvaluator(new ArgbEvaluator());
animator.setRepeatCount(2);
animator.setRepeatMode(ValueAnimator.REVERSE);
animator.start();
}
现在的问题是,应用程序没有再次将背景设置为rounded_button,按钮保持矩形。
为什么会发生这种情况?如何让圆形按钮闪烁并再次绕过它?
如果已经有这样的问题得到解答,我很抱歉,请提供链接。
谢谢!
答案 0 :(得分:0)
您正在制作视图的backgroundColor动画,它将为背景设置矩形/方形
相反,你必须实现alphaanimation
一个例子:
ObjectAnimator objAnimator = ObjectAnimator.ofFloat(mCircle, "alpha",0f,1f);
objAnimator.setDuration(1000);
objAnimator.setRepeatMode(Animation.REVERSE);
objAnimator.setRepeatCount(Animation.INFINITE);
objAnimator.start();
答案 1 :(得分:0)
为按钮设置动画
if(answerTrue){
// Set the color of the button to GREEN once.
// Next, animate its visibility with the set color - which is GREEN as follows:
Animation anim = new AlphaAnimation(0.0f, 1.0f);
anim.setDuration(50); //You can manage the blinking time with this parameter
anim.setStartOffset(20);
anim.setRepeatMode(Animation.REVERSE);
anim.setRepeatCount(Animation.INFINITE);
button.startAnimation(anim);
}
答案 2 :(得分:0)
使用动画时(有时),您希望与UI相关的操作是同步的。为此,您需要向ObjectAnimator
添加动画侦听器,并在动画结束时调用setBackgroundResource()
方法。
以下是一个示例,我编辑了您的blinkEffectRed1
方法:
private void blinkEffectRed1(){
ObjectAnimator animator = ObjectAnimator.ofInt(mButtonChoice1, "backgroundColor", Color.RED , Color.parseColor(("#ff669900")));
animator.setDuration(250);
animator.setEvaluator(new ArgbEvaluator());
animator.setRepeatCount(2);
animator.setRepeatMode(ValueAnimator.REVERSE);
// Adding the listener
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
// Update the button when animation ends...
mButtonChoice1.setBackgroundResource(R.drawable.rounded_button);
updateQuestion();
}
});
animator.start();
}
我希望能解决它:)