0

所以我正在制作一个关于“我不告诉你”的应用程序...... :-)

解决问题:

   final ToggleButton passTog = (ToggleButton) findViewById(R.id.onoff);

passTog.setOnClickListener(new View.OnClickListener() {

                public void onClick(View v) {
                    init = System.currentTimeMillis();
                    handler.post(updater);
                }
            });

上面是一个普通的切换按钮,我之前定义了一个处理程序,使用它我正在运行一个名为更新程序的 Runnable ...(对于以下内容:“显示”是一个文本视图)

final Runnable updater = new Runnable() {
            @Override
            public void run() {
                if (passTog.isChecked()) {
                    now = System.currentTimeMillis();
                    time = now - init;
                    display.setText(time + " ms");
                    handler.postDelayed(this, 30);
                }
            }
        };

这是可运行的......变量时间,现在,初始化......是时间变量。

我正在尝试做的是(现在)我正在更新 textview 自按下切换按钮以来经过的毫秒数(请参阅 if 语句)

上述代码的解释

因此,活动开始,单击切换按钮,初始化变量获取当前时间的值......程序进入可运行状态。现在,在仔细检查按钮实际上处于“打开”状态之后......系统将当前时间置于“现在”......我们将时间变量作为两者的减法。并且每 30 毫秒在文本视图“显示”中更新一次。在应用程序中,您可以随着时间的推移看到 textview 的节奏。效果很好。

就是这样,而我想要的是...

活动开始,您按下按钮.. 在随机时间延迟* 2-10 秒之间....然后 textview 应该开始更新。

我们按下一个按钮,似乎没有发生任何事情,然后在随机延迟之后...... textview 爆发,并开始从 1ms 开始生成当前时间,即上述可运行对象应该在随机时间延迟之后运行。

看到这件事是完全合乎逻辑的,而不是真正的技术性 - 我需要在可运行的事情之前以某种方式引入一个非固定的时间延迟。

我认为我们可以在可运行文件本身中做到这一点......我们已经有了“时间”变量......为什么不在“if”语句中使用它......然后重置时间变量,以便似乎要从头开始。

沉重的东西,我似乎无法正确处理。

知道我们该怎么做吗?

4

3 回答 3

2

简单地延迟可运行文件的第一篇文章怎么样?

public void onClick(View v) {
    init = System.currentTimeMillis();
    handler.postDelayed(updater, 2000+(new Random().nextInt(8000));
}

在最小 2000 毫秒和最大 9999 毫秒后,TextView 开始更新。单击按钮时的初始化时间保持不变。如果您希望初始化时间也成为延迟时间,请尝试以下操作:

public void onClick(View v) {
    init = -1;
    handler.postDelayed(updater, 2000+(new Random().nextInt(8000));
}



final Runnable updater = new Runnable() {
            @Override
            public void run() {
                if (passTog.isChecked()) {
                    if(init == -1) init = System.currentTimeInMillis();
                    now = System.currentTimeMillis();
                    time = now - init;
                    display.setText(time + " ms");
                    handler.postDelayed(this, 30);
                }
            }
        };

这是你想要达到的,还是我理解错了?

于 2013-09-19T12:56:46.113 回答
0

尝试类似:

 Thread t= new Thread(){
        @Override
    public void run(){
            try {
                sleep(1000);
            } catch (InterruptedException e) {

            }
            finally {
                performActionHere();
            }
        }
    };

    t.start();
于 2013-09-19T13:16:38.950 回答
0
new CountDownTimer(2000, 1000) {
                  //currently time delay is 2000 milliseconds
            @Override
            public void onFinish() {
                // TODO Auto-generated method stub
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {

                        // do your task here

                    }
                });
            }

            @Override
            public void onTick(long millisUntilFinished) {
            }
        }.start();
于 2013-09-19T13:22:50.353 回答