我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android 中不用线程如何实现倒计时

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android 中不用线程如何实现倒计时

需求:

有多个组件可以开启倒计时,正常情况下默认倒计时时间终了后更新UI,另,用户可以取消指定倒计时。

这里使用CountDownTimer进行倒计时,其中回调函数onFinish是在倒计时终了时回调,onTick是在倒计时开始时回调,用户可以使用CountDownTimer对象的cancel方法取消倒计时。

这样做的好处:不需要使用繁琐的线程去控制倒计时,更方便的进行UI更新。

上代码:

MainActivity


package test.demo.countdowntest;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
  private Button bt1, bt2, bt3;
  private ProgressBar pb1, pb2, pb3;
  private MyCount mc1,mc2, mc3;
  private boolean mc1Click = false;
  private boolean mc2Click = false;
  private boolean mc3Click = false;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    bt1 = ((Button) findViewById(R.id.bt1));
    bt2 = ((Button) findViewById(R.id.bt2));
    bt3 = ((Button) findViewById(R.id.bt3));
    bt1.setOnClickListener(this);
    bt2.setOnClickListener(this);
    bt3.setOnClickListener(this);
    pb1 = ((ProgressBar) findViewById(R.id.pb1));
    pb2 = ((ProgressBar) findViewById(R.id.pb2));
    pb3 = ((ProgressBar) findViewById(R.id.pb3));
    mc1 = new MyCount(30000, 1000);
    mc1.setPb(bt1, pb1);
    mc2 = new MyCount(30000, 1000);
    mc2.setPb(bt2, pb2);
    mc3 = new MyCount(30000, 1000);
    mc3.setPb(bt3, pb3);
  }
  @Override
  public void onClick(View view) {
    switch (view.getId()) {
      case R.id.bt1:
        if (mc1Click) {
          mc1.cancel();
          pb1.setVisibility(View.GONE);
          mc1Click = false;
        } else {
          pb1.setVisibility(View.VISIBLE);
          mc1.start();
          mc1Click = true;
        }
        break;
      case R.id.bt2:
        if (mc2Click) {
          pb2.setVisibility(View.GONE);
          mc2.cancel();
          mc2Click = false;
        } else {
          pb2.setVisibility(View.VISIBLE);
          mc2.start();
          mc2Click = true;
        }
        break;
      case R.id.bt3:
        if (mc3Click) {
          pb3.setVisibility(View.GONE);
          mc3.cancel();
          mc3Click = false;
        } else {
          pb3.setVisibility(View.VISIBLE);
          mc3.start();
          mc3Click = true;
        }
        break;
    }
  }
  
  class MyCount extends CountDownTimer {
    Button mBt;
    ProgressBar mPb;
    public MyCount(long millisInFuture, long countDownInterval) {
      super(millisInFuture, countDownInterval);
    }
    public void setPb(Button bt, ProgressBar pb) {
      mBt = bt;
      mPb = pb;
    }
    @Override
    public void onFinish() {
      mPb.setVisibility(View.GONE);
    }
    @Override
    public void onTick(long millisUntilFinished) {
      mBt.setText("请等待30秒(" + millisUntilFinished / 1000 + ")...");
      Toast.makeText(MainActivity.this, millisUntilFinished / 1000 + "", Toast.LENGTH_LONG).show();
    }
  }
}

activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/activity_main"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:paddingBottom="@dimen/activity_vertical_margin"
  android:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin"
  android:orientation="vertical"
  tools:context="cn.sh.changxing.countdowntest.MainActivity">
  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <Button
      android:id="@+id/bt1"
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:text="测试启动1"/>
    <ProgressBar
      android:id="@+id/pb1"
      style="?android:attr/progressBarStyleSmall"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="center"
      android:indeterminate="true"/>
  </LinearLayout>
  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <Button
      android:id="@+id/bt2"
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:text="测试启动2"/>
    <ProgressBar
      android:id="@+id/pb2"
      style="?android:attr/progressBarStyleSmall"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="center"
      android:indeterminate="true"/>
  </LinearLayout>
  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <Button
      android:id="@+id/bt3"
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:text="测试启动3"/>
    <ProgressBar
      android:id="@+id/pb3"
      style="?android:attr/progressBarStyleSmall"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="center"
      android:indeterminate="true"/>
  </LinearLayout>
</LinearLayout>

以上所述是小编给大家介绍的Android 中不用线程如何实现倒计时,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程网网站的支持!

您可能感兴趣的文章:android使用AsyncTask实现多线程下载实例android主线程和子线程之间消息传递详解Android线程实现图片轮播Android使用listview实现分页刷新(线程休眠模拟)Android Socket 线程连接openwrt与arduino单片机串口双向通信的实例解析Android 中通过实现线程更新Progressdialog (对话进度条)Android实现网络多线程断点续传下载实例Android 开发中线程的分析


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android 中不用线程如何实现倒计时

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android 中不用线程如何实现倒计时

需求: 有多个组件可以开启倒计时,正常情况下默认倒计时时间终了后更新UI,另,用户可以取消指定倒计时。 这里使用CountDownTimer进行倒计时,其中回调函数onFinish是在倒计时终了时回调,onTick是在倒计时开始时回调,用户
2022-06-06

Android中如何实现倒计时验证

这篇文章主要介绍了Android中如何实现倒计时验证,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。短信验证码功能,这里总结了两种常用的方式,可以直接拿来使用。看图:说明:这里
2023-05-31

Android如何实现抢购倒计时功能

这篇文章将为大家详细讲解有关Android如何实现抢购倒计时功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、效果图二、思路算多少秒,秒数取余60,(满足分后剩下的秒数)算多少分,秒数除60,再取余6
2023-06-14

Android中CountDownTimer 实现倒计时功能

CountDownTimerCountDownTimer 是android 自带的一个倒计时类,使用这个类可以很简单的实现 倒计时功能CountDownTimer 的实现方式 new CountDownTimer(6000,1000) {/
2023-05-31

如何实现在线答题中的倒计时功能

随着互联网的快速发展和智能设备的普及,越来越多的教育活动也开始向线上迁移,其中包括在线答题。在线答题作为一种新型的教育形式,可以提供更加便捷和灵活的学习方式,受到了越来越多的使用者的青睐。其中一个重要的功能就是倒计时,在规定的时间内完成答题
2023-10-21

Android中怎么使用flow实现倒计时

本篇内容主要讲解“Android中怎么使用flow实现倒计时”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android中怎么使用flow实现倒计时”吧!现在因为有了协程和Flow,我们可以借助
2023-06-30

php如何实现倒计时

php实现倒计时的方法:1、通过date_default_timezone_set设置时区;2、配置每天的活动时间段;3、计算出服务器和客户端的时间差;4、通过“function GetRTime(){...}”方法实现倒计时即可。
2015-09-03

如何实现VBS倒计时

这篇文章给大家分享的是有关如何实现VBS倒计时的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。以下内容为程序代码: