让一个按钮闪烁白色到红色,然后给它旧的圆形形状

时间:2018-05-02 11:55:53

标签: java android android-studio

我已经搜索了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,按钮保持矩形。

为什么会发生这种情况?如何让圆形按钮闪烁并再次绕过它?

如果已经有这样的问题得到解答,我很抱歉,请提供链接。

谢谢!

3 个答案:

答案 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();
}

我希望能解决它:)