android如何暂停倒计时,Android计时器和倒计时的实现(含开始,暂停,和复位)...

倒计时和计时在比赛中经常用到,由于涉及到子线程和主线程的通信问题,同学们在制作的时候总有点畏手畏脚的,今天会有两个神器出现,帮助大家攻克这两道难关!

神器一:chronometer --andrdoid 控件的一种,自带监听方法,使用前需要将该控件设置在xml配置文件里

神奇二:CountDownTimer---代码控制的倒计时,只需要调用textview显示即可

==================================================================

【计时】:

一切从简单开始,首先制作计时功能:

拖动该控件到graph页面上,xml文档如下:

android:id="@+id/ctdtxt"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:visibility="gone"

android:textSize="40dp"

android:layout_gravity="center"

android:text="" />

android:id="@+id/chronometer1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:text="Chronometer"

android:textSize="80dp" />

一个textview用来显示,下面就是带的计时器了,接下来就是代码大显身手的时候

主Activityprivate class OnChronometer implements OnChronometerTickListener{

@Override

public void onChronometerTick(Chronometer arg0) {

// TODO Auto-generated method stub

String time=clock.getText().toString().replaceAll("[^(\\d{2}:\\d{2})]", "");

if((hour+":"+minute).equals(time)){

GameStart.this.vibrator.vibrate(new long[]{1000, 10,1000,100},0);//设置震动周期以及循环震动

}

}

}private class StartListener implements OnClickListener{

@Override

public void onClick(View arg0) {

// TODO Auto-generated method stub

GameStart.this.clock.setBase(SystemClock.elapsedRealtime()-recordTime);//

GameStart.this.clock.start();//开始计时

}

private class StopListener implements OnClickListener{

@Override

public void onClick(View arg0) {

// TODO Auto-generated method stub

GameStart.this.clock.stop();//停止计时

GameStart.this.vibrator.cancel();//取消震动

recordTime=SystemClock.elapsedRealtime()-clock.getBase();

}

}

private class BaseListener implements OnClickListener{

@Override

public void onClick(View arg0) {

// TODO Auto-generated method stub

recordTime=0;//重置时间

GameStart.this.clock.setBase(SystemClock.elapsedRealtime());//复位

}

}

计时功能完成

效果如图:

5dba1525e7a0b9f0abced61e4218e6a5.jpg

e5aa024830e473104079197be1255180.jpg

========================================================

【倒计时】:

采用一个CountDownTimer

同样准备一个textview用于显示

代码如下:public void initCountDownTimer(long millisInFuture){

timer = new CountDownTimer(millisInFuture, 1000) {

@Override

public void onTick(long millisUntilFinished) {

// TODO Auto-generated method stub

lefttime=millisUntilFinished;

cdtxt.setText(millisUntilFinished/1000/60+":"+millisUntilFinished/1000%60);

}

@Override

public void onFinish() {

cdtxt.setText("00:00");

}

};

}

开始倒计时后,只有暂停功能private class StartListener implements OnClickListener{

@Override

public void onClick(View arg0) {

// TODO Auto-generated method stub

if(timer!=null){

Toast.makeText(getBaseContext(),lefttime+"", 100).show();

timer.start();

start.setVisibility(View.GONE); //设置开始按钮隐藏

}

}

}

private class StopListener implements OnClickListener{

@Override

public void onClick(View arg0) {

// TODO Auto-generated method stub

if(timer!=null&&!isPause){

Toast.makeText(getBaseContext(),"pause", 100).show();

isPause=true;

timer.cancel();

}

else if(lefttime!=0){

Toast.makeText(getBaseContext(),"continue", 100).show();

initCountDownTimer(lefttime);

timer.start();

isPause=false;

}

}

}

实现效果如下:

ff872ce7a6e80effbd87f37990434cef.jpg

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值