Позволяя кнопке мигать от белого до красного, затем придавая ей старую округлую форму - PullRequest
0 голосов
/ 02 мая 2018

Я уже искал переполнение стека, но просто не могу найти правильный ответ для своего случая.

В настоящее время я пишу приложение для викторины в 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.ounded_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();
}

Проблема в том, что приложение не устанавливает фон снова как roundnded_button, а кнопка остается прямоугольником.

Почему это происходит, и как заставить круглую кнопку мигать и снова включить ее?

Если на этот вопрос уже есть ответ, прошу прощения, пожалуйста, дайте мне ссылку.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Анимируйте кнопку, если ответ верен

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);
}
0 голосов
/ 02 мая 2018

При использовании анимации (иногда) вы хотите, чтобы операции, связанные с пользовательским интерфейсом, были синхронными. Для этого вам необходимо добавить слушатель анимации к 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();
}

Я надеюсь, что это решит :) 1009 *

0 голосов
/ 02 мая 2018

Вы анимируете backgroundColor представления, это собирается анимировать фон, который является прямоугольником / квадратом

Вместо этого вы должны реализовать альфаанимацию

Пример:

ObjectAnimator objAnimator = ObjectAnimator.ofFloat(mCircle, "alpha",0f,1f);
objAnimator.setDuration(1000);
objAnimator.setRepeatMode(Animation.REVERSE);
objAnimator.setRepeatCount(Animation.INFINITE);
objAnimator.start();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...