欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-12 18:00:54
...

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

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

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

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

【计时】:

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

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

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

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

 计时功能完成

效果如图:


Android计时器和倒计时的实现(含开始,暂停,和复位)
            
    
    博客分类: Android初步 android倒计时计时countdowntimerChronometer 
 
Android计时器和倒计时的实现(含开始,暂停,和复位)
            
    
    博客分类: Android初步 android倒计时计时countdowntimerChronometer 
 ========================================================

【倒计时】:

采用一个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;
        	
        }
           
              
        }  
          
    }  

 实现效果如下:


Android计时器和倒计时的实现(含开始,暂停,和复位)
            
    
    博客分类: Android初步 android倒计时计时countdowntimerChronometer 
 

 

  • Android计时器和倒计时的实现(含开始,暂停,和复位)
            
    
    博客分类: Android初步 android倒计时计时countdowntimerChronometer 
  • 大小: 6 KB
  • Android计时器和倒计时的实现(含开始,暂停,和复位)
            
    
    博客分类: Android初步 android倒计时计时countdowntimerChronometer 
  • 大小: 5.3 KB
  • Android计时器和倒计时的实现(含开始,暂停,和复位)
            
    
    博客分类: Android初步 android倒计时计时countdowntimerChronometer 
  • 大小: 2.5 KB