• 倒计时的CountDownTimer


    直接看这里吧,我仅仅是搬运工。 

    定时运行在一段时候后停止的倒计时,在倒计时运行过程中会在固定间隔时间得到通知(译者:触发onTick方法),以下的样例显示在一个文本框中显示一个30s倒计时: 
    Java代码  收藏代码
    1. new CountdownTimer(300001000) {  
    2.      public void onTick(long millisUntilFinished) {  
    3.          mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);  
    4.      }  
    5.      public void onFinish() {  
    6.          mTextField.setText("done!");  
    7.      }  
    8.  }.start();   

    onTick的调用是同步的,保证这次调用不会在之前调用完毕前发生。这里的同步机制主要是用来:onTick的实现须要非常多时间运行比倒计时间隔更重要的事情。 

    构造函数 
             public CountDownTimer (long millisInFuture, long countDownInterval) 
    參数 
                       millisInFuture  从開始调用start()到倒计时完毕并onFinish()方法被调用的毫秒数。(译者注:倒计时时间,单位毫秒) 
                       countDownInterval  接收onTick(long)回调的间隔时间。(译者注:单位毫秒) 

    公共方法 
    public final void cancel () 
             取消倒计时(译者:取消后,再次启动会又一次開始倒计时)        
                      
    public abstract void onFinish () 
             倒计时完毕时被调用    

    public abstract void onTick (long millisUntilFinished) 
             固定间隔被调用 
    參数 
                                millisUntilFinished   倒计时剩余时间。 

    public synchronized final CountDownTimer start () 
             启动倒计时 
    Java代码  收藏代码
    1. import android.app.Activity;  
    2. import android.os.Bundle;  
    3. import android.os.CountDownTimer;  
    4. import android.util.Log;  
    5. import android.view.View;  
    6. import android.view.View.OnClickListener;  
    7. import android.widget.Button;  
    8. import android.widget.TextView;  
    9.    
    10. import com.test.R;  
    11.    
    12. public class CountDownTimeActivity extends Activity implements OnClickListener {  
    13.    
    14.     TextView mTextView;  
    15.     Button mButton1;  
    16.     Button mButton2;  
    17.      
    18.     @Override  
    19.     protected void onCreate(Bundle savedInstanceState) {  
    20.        super.onCreate(savedInstanceState);  
    21.         
    22.        setContentView(R.layout.countdown);  
    23.         
    24.        mTextView = (TextView)findViewById(R.id.textView1);  
    25.        mButton1 = (Button)findViewById(R.id.button1);  
    26.        mButton2 = (Button)findViewById(R.id.button2);  
    27.        mButton1.setOnClickListener(this);  
    28.        mButton2.setOnClickListener(this);  
    29.     }  
    30.    
    31.     CountDownTimer timer = new CountDownTimer(40000,1000) {  
    32.         
    33.        @Override  
    34.        public void onTick(long millisUntilFinished) {  
    35.            mTextView.setText("seconds remaining: " + millisUntilFinished / 1000);  
    36.            try {  
    37.               Thread.sleep(1200);  
    38.            } catch (InterruptedException e) {  
    39.               e.printStackTrace();  
    40.            }  
    41.            Log.e("CountDown",millisUntilFinished+"");  
    42.        }  
    43.         
    44.        @Override  
    45.        public void onFinish() {  
    46.            mTextView.setText("done!");  
    47.        }  
    48.     };  
    49.      
    50.     @Override  
    51.     public void onClick(View v) {  
    52.        switch(v.getId()){  
    53.        case R.id.button1:  
    54.            timer.start();  
    55.            break;  
    56.        case R.id.button2:  
    57.            timer.cancel();  
    58.            break;  
    59.        }  
    60.         
    61.     }  
    62. }  

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activation);
    initView();
    resendBTCountDownTimer(resendBtn,false);
    }

    /**
    * 重发验证码button倒计时操作
    * @param resendBtn
    * @param resendCode: false初始化并倒计时開始;true点击次数倒计时開始并又一次获取验证码操作
    */
    public void resendBTCountDownTimer(final Button resendBtn,boolean resendCode){
    if(resendCount>5){
    resendBtn.setText(R.string.resentcode_5times_tips);
    resendBtn.setEnabled(false);
    resendBtn.setBackgroundResource(R.drawable.button_no_cliable);
    return;
    }else{
    new CountDownTimer(MILLIS_INFUTURE, COUNTDOWN_INTERVAL) {
    @Override
    public void onTick(long millisUntilFinished) {
    resendBtn.setEnabled(false);
    resendBtn.setBackgroundResource(R.drawable.button_no_cliable);
    resendBtn.setText(getString(R.string.regetcodeafter30s, millisUntilFinished/1000));
    }
    @Override
    public void onFinish() {
    resendBtn.setText(R.string.resend_code);
    resendBtn.setEnabled(true);
    resendBtn.setBackgroundResource(R.drawable.registbtn);
    }
    }.start();
    if(resendCode){
    resendCount++ ;
    regetCheckCodeFun();
    }
    }
    }

  • 相关阅读:
    高效程序猿的45个习惯:敏捷开发修炼之道之主题建议翻译1-10
    VS2010旗舰版安装图解
    ibatis 使用 in 查询的几种XML写法
    人脸识别算法初次了解
    键盘过滤驱动
    python property属性
    癞子麻将胡牌算法实现
    恩布900手机客服,安卓版本号Entboost Android 1.0 正式公布
    C语言递归实现二叉树的先序、中序、后序遍历
    CSS:CSS 属性 选择器
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4509561.html
Copyright © 2020-2023  润新知