有没有办法让一个按钮多次激活随机数生成器/数组?



我目前正在做初学者安卓工作室/Java课程。 我制作了一个掷骰子应用程序和一个魔术八球应用程序,它们都使用 RNG 和数组在按下按钮时叠加新图像。

在向朋友展示后,他们说有某种动画会很好,现在我不打算对 3D 骰子等进行建模和动画制作,仅仅是因为我不能。

我确实有一个想法,按下触发RNG的按钮可以用来发射它设定的次数,比如说10次,结果在骰子数字/8球图像中循环将产生伪动画外观。

我的问题是,如何按下一个按钮,多次触发RNG/数组?

我试图在这里和谷歌上搜索答案,但我认为我没有问正确的问题,因为我能找到的所有答案都是关于如何阻止多个操作的发生,而不是试图自动强迫它们

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button AskButton;
AskButton = findViewById(R.id.AskButton);
final ImageView Ball;
Ball = findViewById(R.id.Ball);
final int[] ballArray = {R.drawable.ball1,
R.drawable.ball2,
R.drawable.ball3,
R.drawable.ball4,
R.drawable.ball5};
AskButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("Magic Eight Ball", "Button Press");
Random RNG = new Random();
int number = RNG.nextInt(5);
Log.d("Magic Eight Ball", "Number is:" + number );
Ball.setImageResource(ballArray [number]);
}
});
}
}

目前,一键按一次即可更改图像,我希望一键按下在停止之前快速连续更改图像 10 次。

尝试这样的事情:

private fun animateNextFrame(delay: Long) {
ball.postDelayed({
ball.setImageResource(ballArray[rng.nextInt(5)]);
if (delay < 1000) {
animateNextFrame(delay * 2)
}
}, delay)
}

然后在您的onClick()中,只需第一次(立即(调用可运行的回调,并提供初始延迟。

操作值(初始延迟、阈值和乘数(以使动画感觉更自然(例如 - 我的方法在开始时更快地旋转值,然后在结束时更慢地旋转值(。

请记住在您的活动停止/销毁时清除您的回调(ball.removeCallbacks(null)(。

最新更新