Android 中计时器的支持库

7

是否有支持库函数可以使计时器的setCountDown函数在低于24的API上得到支持?


把API 24的源代码复制粘贴到你的项目中,然后使用那个Chronometer怎么样? - azizbekian
你能详细说明一下吗? - Wali Muhammad Khubaib
类复制粘贴到您的包中,使用com.your.package.Chronometer类代替android.widget.Chronometer,您觉得如何? - azizbekian
尝试过但没有成功。 - Wali Muhammad Khubaib
尝试过了,但是没有成功。具体是什么没有成功呢? - azizbekian
您还需要复制字符串资源。它们位于<sdk>/platforms/android-XX/data/res/values和values-YY,根据您想要的语言不同而有所不同。 - Eugen Pechanec
2个回答

1
你可以尝试使用RXJava来简单处理线程、计时器和其他许多功能。
计时器操作符的文档如下:
创建一个Observable,在给定延迟后发出特定项。
因此,您观察到的行为是预期的-timer()在延迟后只发出单个项。
另一方面,interval操作符将以给定间隔间隔发出项目。
例如,此Observable将每秒发出一个项目:
Observable.interval(1, TimeUnit.SECONDS);
以下是一个完整的示例:
Observable.interval(1,TimeUnit.SECONDS, Schedulers.io())
        .take(300) // take 300 second
        .map(v -> 300 - v)
        .subscribe(
            onNext -> {
                //on every second pass trigger
            },
            onError -> {
                //do on error
            },
            () -> {
                //do on complete
            },
            onSubscribe -> {
                //do once on subscription
            });

0
根据Android文档,API级别低于24是不可能的。计时器小部件只能使用计数器。如果需要这样做,请使用倒计时器
例如:
final int oneSecond = 1000; // in milliSeconds i.e. 1 second
final int tenSeconds = 100000; // 100 seconds
CountDownTimer cTimer =  new CountDownTimer(100000, oneSecond) {

     public void onTick(long millisUntilFinished) {

             int totalTime = 60000; // in milliseconds i.e. 60 seconds
             String v = String.format("%02d", millisUntilFinished/totalTime);
             int va = (int)( (millisUntilFinished%totalTime)/oneSecond);
             textView.setText("remaining seconds: " +v+":"+String.format("%02d",va));
     }

     public void onFinish() {
         textView.setText("done!");
     }
  };
  cTimer.start();

编辑:

如果您想使用GitHub解决方案,请查看thisthis


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接