【问题标题】:Android Studio give a FOR loop a delayAndroid Studio 给 FOR 循环一个延迟
【发布时间】:2016-05-16 03:23:43
【问题描述】:

我正在尝试构建简单的应用程序,用户需要记住计算机按下了哪些按钮.. 单击的每个按钮都会发出声音..所以为了使每个声音正确发出声音,我尝试在计算机按下的每次单击之间提供一点延迟...

所以我制作了 int[] ,其中包括计算机单击按钮的方式顺序(1 单击 button1 ,2 单击按钮 2 ....) 现在我试图按按钮哈哈 所以我做了这个:

   private void ClickButtons(int[] sequence) {
        Button btcomp1 = (Button) findViewById(R.id.btComp1);
        Button btcomp2 = (Button) findViewById(R.id.btComp2);
        Button btcomp3 = (Button) findViewById(R.id.btComp3);
        Button btcomp4 = (Button) findViewById(R.id.btComp4);
        TextView check=(TextView)findViewById(R.id.textViewKq);
        Handler handler = new Handler();

        for (int i = 0; i < sequence.length; i++)
        {
            switch (sequence[i]) {
                case 1:
                    btcomp1.performClick();
                    check.setText("4..");
                    timedelay();
                    break;
                case 2:
                    btcomp2.performClick();
                    check.setText("3..");
                    timedelay();

                    break;
                case 3:
                    btcomp3.performClick();
                    check.setText("2..");
                    timedelay();
                    break;
                case 4:
                    btcomp4.performClick();
                    check.setText("1..");
                    timedelay();
                    break;
            }

        }
    }

效果不好,我什至认为他们的按钮可能有问题,所以我将其设置为更改一些 Textview,但它似乎只进入一种情况......唯一的延迟是当我从FirstActivity 到 GameActivity

我真的在 FirstActivity 中没有任何内容,只是用户名的字段......

我希望你们对我有帮助,对语法也有帮助>

这是延迟..我试图做某事,但所做的只是在我从活动 1 转到另一个活动后延迟几秒钟,但主要什么都不做..

 private void timedelay() {
    try{
        Thread.sleep(2500);
    }
    catch (Exception e){

    }
}

【问题讨论】:

  • timedelay() 先生是谁?告诉他,也不要拖延你的观点所在的线程 - 希望你能理解我吗?
  • 其实你的timedelay方法是干什么的?向我们展示代码
  • “效果不好”——说吧!

标签: java android android-activity android-studio delay


【解决方案1】:

对于这种事情,您绝对应该使用android.os.Handler 来制作计时器。并在回调方法中,单击按钮。您现在使用的方法可能会阻塞主线程。这真的很糟糕。

幸运的是,我已经写了一个Timer 类来做到这一点!这是整个班级:

import android.os.Handler;

public class Timer {
    private Handler handler;
    private boolean paused;

    private int interval;

    private Runnable task = new Runnable () {
        @Override
        public void run() {
            if (!paused) {
                runnable.run ();
                Timer.this.handler.postDelayed (this, interval);
            }
        }
    };

    private Runnable runnable;

    public int getInterval() {
        return interval;
    }

    public void setInterval(int interval) {
        this.interval = interval;
    }

    public void startTimer () {
        paused = false;
        handler.postDelayed (task, interval);
    }

    public void stopTimer () {
        paused = true;
    }

    public Timer (Runnable runnable, int interval, boolean started) {
        handler = new Handler ();
        this.runnable = runnable;
        this.interval = interval;
        if (started)
            startTimer ();
    }
}

试着理解它。完成此操作后,您可以像这样使用此计时器:

final Timer t = new Timer(new Runnable() {
    private int i = 1;
    Button btcomp1 = (Button) MainActivity.this.findViewById(R.id.btComp1);
    Button btcomp2 = (Button) MainActivity.this.findViewById(R.id.btComp2);
    Button btcomp3 = (Button) MainActivity.this.findViewById(R.id.btComp3);
    Button btcomp4 = (Button) MainActivity.this.findViewById(R.id.btComp4);
    TextView check=(TextView)MainActivity.this.findViewById(R.id.textViewKq);
    public void run() {
        switch (i) {
            case 1:
                btcomp1.performClick();
                check.setText("4..");
                break;
            case 2:
                btcomp2.performClick();
                check.setText("3..");
                break;
            case 3:
                btcomp3.performClick();
                check.setText("2..");
                break;
            case 4:
                btcomp4.performClick();
                check.setText("1..");
                t.stopTimer();
                break;
        }
    }
}, 1000, true);

创建此计时器后,它基本上每秒按一次按钮。并设置check的文字。当它第四次按下它时,计时器停止。

简单! (如果你有计时器类)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多