必威体育Betway必威体育官网
当前位置:首页 > IT技术

倒计时

时间:2019-08-28 18:41:06来源:IT技术作者:seo实验室小编阅读:73次「手机版」
 

倒计时

一、CountDownTimer

该类是个抽象类,如果要使用这个类中的方法,就必须继承这个类实现它内部的抽象方法,该继承的类中通常是存在某个类的内部类中。该类主要功能就是可以我们自己设置倒计时的秒数和时间间隔,且只有一个构造方法,构造函数为:

 public CountDownTimer(long millisInFuture, long countDownInterval) {//分别为总时间和时间间隔
        mMillisInFuture = millisInFuture;
        mCountdownInterval = countDownInterval;
    }

可以看出需要传入两个参数进去,第一个参数就是我们设置倒计时的总时间,第二个参数就是我们设置倒计时时的时间间隔。

我们来使用一下:

class TimeCountDown extends CountDownTimer{
 
	public TimeCountDown(long millisInFuture, long countDownInterval) {
		super(millisInFuture, countDownInterval);
		// TODO Auto-generated constructor stub
	}
 
	@Override
	public void onTick(long millisUntilFinished) {
		// TODO Auto-generated method stub
		
	}
 
	@Override
	public void onFinish() {
		// TODO Auto-generated method stub
		
	}
	
}

可以看到,子类必须要和它的构造函数参数相同之外,还必须实现它的两个方法,分别是:onTick()和onFinish()方法,

我们说说这两个方法分别是什么意思

onTick(long millisUntilFinished):这个方法中的参数是在倒计时过程中传入进来的毫秒数,比如倒计时总时间为6秒,时间间隔为一秒,那么这个参数的传进来的值依次为:5、4、3、2、1

onFinish():这个方法就是当倒计时完毕时候触发,这时候可以设置一些配置,比如一个申请验证码的按钮,在倒计时过程中设置为失去焦点,等倒计时完毕后,就在这个方法中设置为得到焦点。

class TimeCount extends CountDownTimer {
		public TimeCount(long millisInFuture, long countDownInterval) {
			super(millisInFuture, countDownInterval);// 参数依次为总时长,和计时的时间间隔
		}
 
		@Override
		public void onFinish() {// 计时完毕时触发
			mButtonConfirmCode.setText("重新获取");
			mButtonConfirmCode.setClickable(true);
			mButtonConfirmCode.setbackgroundcolor(Color.rgb(187, 201, 230));
		}
 
		@Override
		public void onTick(long millisUntilFinished) {// 计时过程显示
			mButtonConfirmCode.setClickable(false);
			mButtonConfirmCode.setBackgroundColor(Color.GRAY);
			mButtonConfirmCode.setText("重新获取(" + millisUntilFinished / 1000
					+ ")秒后");
		}
	}

使用时这么使用:

new TimeCount(60000, 1000).start();

注意要start();

二、Timer

这个类功能也是用于计时的,而且是线程安全的,创建这个类的对象也很简单,直接Timer mTimer=new Timer();new出来,也没什么可说的,而且这个对象的主要方法就一个就是schedule(),意思就是计时计划,计时安排。我就主要讲其中两个方法吧:

mTimer.schedule(task, when);这个方法第一个参数就是需要传入一个TimerTask对象,该对象实现了Runnable接口,简单的说就是一个线程对象,就是开一个线程来执行run()方法中的代码的。第二个参数传入的类型是Date类型,意思就是定时一样,这个run()方法中的代码在什么时候执行。

mTimer.schedule(task, delay);这个方法的第一个参数和上面的一样。第二个参数就是一个long类型的数据,意思就是延迟多少时间执行run()方法中的代码,单位为毫秒。

我就讲直接上代码看看怎么用吧:

Timer mTimer = new Timer();
TimerTask mTimerTask = new TimerTask() {//创建一个线程来执行run方法中的代码
	@Override
	public void run() {
	//要执行的代码
	}
};
mTimer.schedule(mTimerTask, 3000);//延迟3秒执行

【注意】在该计时器中创建的线程不是主线程,而是创建了一个子线程,因为子线程中不能直接更新UI,故在run方法中不能执行有关更新主界面UI的代码,如果要更新UI,那必须用消息处理器handler来处理,在run中发送一个消息给消息队列

三、new Handler().postDelayed()

该方法就是利用我们常说的消息处理器。该方法原理就是在主线程中创建一个Handler消息处理器,然后利用其中的一个postDelayed(Runnable r, long delayMillis)方法,该方法第一个参数需要传入一个Runnable接口,并实现run()方法,第二个参数就是延迟多少时间将run()方法中的代码通过一个消息发送给消息队列,然后在主线程中执行这个消息中的代码,即是run方法中的代码,从而实现在主线程中更新界面UI。

贴代码吧:

new Handler().postDelayed(new Runnable() {//在当前线程(也即主线程中)开启一个消息处理器,并在3秒后在主线程中执行,从而来更新UI
	@Override
	public void run() {
		//有关更新UI的代码
	}
}, 3000);//3秒后发送		

相关阅读

如何优雅地写出融合倒计时的系列短文案?

深刻感受到,作为一名运营,不仅写得了文案,办得了活动,撩得了用户,还要会设计(我貌似说少了好多技能)……言归正传,对期间的工作进行复盘,整

Android CountDownTimer 倒计时器的简单使用

一、写在前面的 在Android应用中几乎都能看到,闪屏页或者欢迎页右上角有一个 “倒计时 + 跳过” 的功能,还有就是获得验证码的倒计

实例讲解微信小程序倒计时功能

本实例的主要功能是:单击按钮弹出一个半透明的弹出层,在规定的时间后才能激活关闭按钮,关闭弹出层。 wxml部分 <view class="wrap"

前端淘宝倒计时怎么弄?怎么使用代码?

店铺内推出了一些活动之后,为了渲染气氛,就可以在店铺首页上设置一个倒计时,为了更加方便的操作,需要用到一些代码,那么具体该怎么操作

倒计时海报的6种玩法,你见过几个?

7月21日起,乐视网董事长兼CEO贾跃亭先生一连在微博上发出4张悬疑海报,宣告7月26日,将在美国举办的LeEco已经开始倒计时。简简单单的

分享到:

栏目导航

推荐阅读

热门阅读