【问题标题】:Is there a way to make a single button press activate a random number generator/array multiple times?有没有办法让一个按钮按下多次激活随机数生成器/数组?
【发布时间】:2019-09-22 12:41:39
【问题描述】:

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

给朋友看了之后,他们说最好有一些动画,现在我不打算对 3D 骰子等进行建模和动画,只是因为我做不到。

我确实有这样的想法,按下触发 RNG 的按钮可以用来触发它一定的次数,比如 10 次,结果循环通过骰子数/8ball 图像会给出一个伪动画外观。

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

我已尝试在此处和 google 上搜索此问题的答案,但我认为我问的问题不正确,因为我能找到的所有答案都是关于如何阻止发生多项操作,而不是试图自动强制他们

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次才停止。

【问题讨论】:

标签: java android


【解决方案1】:

试试这样的:

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

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

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

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

【讨论】:

  • 嘿,我现在已经习惯了 Kotlin 作为标准,直到现在我才意识到您的项目是 Java。对此表示歉意,我希望它仍然有帮助。 :)
  • 感谢您的回答,我将试一试,看看是否可以使用 Java 获得与此类似的东西。谢谢!
  • 毕竟这将是一项富有成效的练习。 :) API 是相同的,因此您只需将其转换为 Java 语法即可。顺便说一句,我的回答中有一个命名错误,我更新了它。
猜你喜欢
  • 2019-10-04
  • 2021-04-27
  • 2011-08-01
  • 2023-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多