如何先播放动画,然后再做一些事情?

时间:2020-04-19 09:05:48

标签: java android-studio animation

大家好,我是Android Studio的新手,我在做一种骰子游戏。所以这是一个问题,当我单击按钮时它应该播放动画(animation.xml,像滚动骰子效果一样骰子1-6),然后应该显示1-6之间的随机骰子,但是它忽略了(我猜)动画并立即显示随机骰子,所以我想先播放动画,然后在我单击按钮时显示随机骰子

animation.xml

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true">
    <item
        android:drawable="@drawable/d1"
        android:duration="200" />
    <item
        android:drawable="@drawable/d2"
        android:duration="200" />
    <item
        android:drawable="@drawable/d3"
        android:duration="200" />
    <item
        android:drawable="@drawable/d4"
        android:duration="200" />
    <item
        android:drawable="@drawable/d5"
        android:duration="200" />
    <item
        android:drawable="@drawable/d6"
        android:duration="200" />
</animation-list>

这是动画和随机骰子代码

rollButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //this animation just doesn't displays 
            animationDice.start();
            //and this code executes immediately 
            playerScoreInt = rollDice(diceRoll1ImageViewPLAYER, diceRoll2ImageViewPLAYER);
            playerScore.setText(Integer.toString(playerScoreInt));
            cpuScoreInt = rollDice(diceRoll1ImageViewCPU, diceRoll2ImageViewCPU);
            cpuScore.setText(Integer.toString(cpuScoreInt));
            winnerChecker();
        }
    });
}

当我单击按钮时,我想 出现1个动画 2个随机骰子出现 而且我可以分别进行操作,但是当我将它们组合到一个事件中时,只是随机骰子就没有动画

2 个答案:

答案 0 :(得分:0)

我认为您正在寻找回调。要使用Kotlin在android中制作动画,您可以尝试执行以下操作:

view.animate()
   .rotation(90f)
   .scaleY(2f)
   .withEndAction(() -> {
        ... code here
    })
    .start();

如果您需要更多信息,请查看文档:{​​{3}}

答案 1 :(得分:0)

我真的不明白你的意思。

如果您希望将骰子上的数字更改几秒钟,并最终获得最终结果,则可以使用CountDownTimer

// finish in 3 seconds, 100 millisecond made 1 time
new CountDownTimer(3000, 100) {
    Random random = new Random();
    @Override
    public void onTick(long millisUntilFinished) {
        // random in 100 millisecond 
        mainBinding.tmp.setText(random.nextInt(6) + "");
    }

    @Override
    public void onFinish() {
        // final result
        mainBinding.tmp.setText(random.nextInt(6) + "");
    }
}.start();