4Manuals

  • PDF Cloud HOME

在运行计时器时增加时间延迟 Download

    如何在Android中使用WebRTC缩放相机 Android 10,API29:在应用程序文件夹中使用C ++库编写文件会使应用程序崩溃 如何将动态值传递给渐变xml 加载数据并推送到未显示的RecyclerView中 调用Model类的函数时出现java.lang.NullPointerException 从网络加载图像时,“接收到完整的报头之前关闭连接 Ionic 3错误:“缺少文件google-services.json。没有它,Google Services插件将无法运行。”在离子科尔多瓦建立/准备Android androidx.appcompat.view.menu.MenuItemImpl无法转换为android.widget.TextView 从Firebase发送推送通知不起作用 Ljava / applet / Applet上的Android LDAP / NoClassDefFoundError;

我是android应用,其中包括了计时器,我使用了计时器。现在有一种情况,在每10秒之后,我使用handler.postdelyed()的天文钟应该改变1秒,但是在这种情况下,天文钟在10秒后开始运行,但是天文钟的计时器从10秒开始而不是1秒。有什么方法可以让我延迟计时吗? 这是我的代码

chronometer_life_gained.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
    @Override
    public void onChronometerTick(final Chronometer chronometer) {
        long delay = (206 / Long.parseLong(joint_per_day))*1000;
        System.out.println("delayer " + delay);
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
        if ((SystemClock.elapsedRealtime() - chronometer.getBase()) < 60000) {
            long dy = TimeUnit.MILLISECONDS.toDays(SystemClock.elapsedRealtime() - chronometer.getBase());
            final long hr = TimeUnit.MILLISECONDS.toHours(SystemClock.elapsedRealtime() - chronometer.getBase())
                    - TimeUnit.DAYS.toHours(TimeUnit.MILLISECONDS.toDays(SystemClock.elapsedRealtime() - chronometer.getBase()));
            final long min = TimeUnit.MILLISECONDS.toMinutes(SystemClock.elapsedRealtime() - chronometer.getBase())
                    - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(SystemClock.elapsedRealtime() - chronometer.getBase()));
            final long sec = TimeUnit.MILLISECONDS.toSeconds(SystemClock.elapsedRealtime() - chronometer.getBase())
                    - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(SystemClock.elapsedRealtime() - chronometer.getBase()));

            year_num_life_gained.setVisibility(View.GONE);
            year_text_life_gained.setVisibility(View.GONE);
            month_num_life_gained.setVisibility(View.GONE);
            month_text_life_gained.setVisibility(View.GONE);
            day_num_life_gained.setVisibility(View.GONE);
            day_text_life_gained.setVisibility(View.GONE);
            hour_num_life_gained.setVisibility(View.GONE);
            hour_text_life_gained.setVisibility(View.GONE);
            min_num_life_gained.setVisibility(View.GONE);
            min_text_life_gained.setVisibility(View.GONE);
            sec_num_life_gained.setVisibility(View.VISIBLE);
            sec_text_life_gained.setVisibility(View.VISIBLE);
            RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

            params.addRule(RelativeLayout.CENTER_VERTICAL);
            params.addRule(RelativeLayout.ALIGN_PARENT_START);
            sec_num_life_gained.setLayoutParams(params);

            sec_num_life_gained.setText(Long.toString(sec));


        }
//
            }
        }, delay);

//    }

    }
});

2 个答案:

答案 0 :(得分:1)

您可以使用CountDownTimer来实现它,尽管它的名字是倒数计时器,但是我们可以使其递增计数。

// Counter variable to show seconds increment
int counter = 4000;

// If you want to count until 60 seconds, put VALUE_IN_MILLIS_UNTIL_YOU_WANT_TO_COUNT_UP = 60000 (in milliseconds)
elapsedTimer = new CountDownTimer(VALUE_IN_MILLIS_UNTIL_YOU_WANT_TO_COUNT_UP, 5000) {
    @Override
    public void onTick(long l) {
// Logically, we need 
long elapsedTime = SystemClock.elapsedRealtime() - startTime - counter;
        long dy = TimeUnit.MILLISECONDS.toDays(elapsedTime);
        final long yr = dy / 365;
        dy %= 365;

        final long mn = dy / 30;
        dy %= 30;

        final long hr = TimeUnit.MILLISECONDS.toHours(elapsedTime)
                - TimeUnit.DAYS.toHours(TimeUnit.MILLISECONDS.toDays(elapsedTime));
        final long min = TimeUnit.MILLISECONDS.toMinutes(elapsedTime)
                - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(elapsedTime));
        final long sec = TimeUnit.MILLISECONDS.toSeconds(elapsedTime)
                - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(elapsedTime));
        // add 4000 as 4 seconds to counter value
        counter = counter + 4000;
        txView.setText(counter + " second");
    }
}.start();

答案 1 :(得分:0)

private Runnable updateTimerMethod = new Runnable() {

    public void run() {
        long elapsedTime = SystemClock.elapsedRealtime() - startTime;
        long dy = TimeUnit.MILLISECONDS.toDays(elapsedTime);
        final long yr = dy / 365;
        dy %= 365;

        final long mn = dy / 30;
        dy %= 30;

        final long hr = TimeUnit.MILLISECONDS.toHours(elapsedTime)
                - TimeUnit.DAYS.toHours(TimeUnit.MILLISECONDS.toDays(elapsedTime));
        final long min = TimeUnit.MILLISECONDS.toMinutes(elapsedTime)
                - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(elapsedTime));
        final long sec = TimeUnit.MILLISECONDS.toSeconds(elapsedTime)
                - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(elapsedTime));

        myHandler.postDelayed(this, 2000);
    }

};



Similar searches
    图片加载并上传到Firebase Storage在android和firebase控制台中无法正常工作,显示“错误加载预览” Unity-在Android 7或更高版本中未显示默认启动器对话框 curl-android-ios构建失败 如何从命令行与Java交互使用keytool? 无法使用tf.keras.applications.MobileNetV2进行训练