android线程倒计时,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

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">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

android:id="@+id/bt1"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_weight="1"

android:text="测试启动1"/>

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"/>

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

android:id="@+id/bt2"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_weight="1"

android:text="测试启动2"/>

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"/>

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

android:id="@+id/bt3"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_weight="1"

android:text="测试启动3"/>

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"/>

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

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值