除非更改视图,否则动画不会发生

时间:2020-03-14 09:46:02

标签: android

当答案为假时,我创建了一个旋转动画,它会摇动CardView, 但是,直到我更改视图状态(例如)后,它才起作用 或调用nextQuestion()。 并且请建议为动画ObjectAnimator,Animation等选择哪个类。

 public void checkAnswer(boolean isTrue) {
        if (isTrue == questionList.get(questionCount).getAnswer()) {
            Toast.makeText(this, R.string.correct_answer, Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, R.string.wrong_answer, Toast.LENGTH_SHORT).show();
            shakeAnimation();
        }
    }

    public void nextQuestion() {
        if (questionCount < questionList.size()) {
            question_textView.setText(questionList.get(++questionCount).getQuestion());
            question_counter.setText((questionCount + 1) + "/" + questionList.size());
        }

    }

    public void shakeAnimation() {
        Animation shake = AnimationUtils.loadAnimation(MainActivity.this, R.anim.shake_animation);
        cardView.setAnimation(shake);
    }

1 个答案:

答案 0 :(得分:0)

您仅设置动画。因此无论何时绘制视图或重新创建视图,动画都将起作用。

您必须在视图上调用开始动画方法才能显示动画。

例如,您的案例代码为

public void shakeAnimation() {
    Animation shake = AnimationUtils.loadAnimation(MainActivity.this, R.anim.shake_animation);
    cardView.startAnimation(shake);
}

setAnimation和startAnimation方法之间的区别

-SetAnimation

将视图添加到视图组时,将调用动画。添加视图后,动画将不会被调用

-StartAnimation

即使已添加视图,动画也会一直被调用。

注意::StartAnimation内部调用setAnimation方法。