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

神器一: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用来显示,下面就是带的计时器了,接下来就是代码大显身手的时候

主Activity

private 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());//复位

}

}

计时功能完成

效果如图:

14134052.jpg

14134053.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;

}

}

}

实现效果如下:

14134054.jpg

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐