读分倒计时代码android_android 倒计时代码 - CSDN
  • android倒计时代码

    2016-08-31 11:34:11
    倒计时代码如下: package com.myresume.cn.activity; import com.myresume.cn.R; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os....

    倒计时代码如下:


    package com.myresume.cn.activity;


    import com.myresume.cn.R;

    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.CountDownTimer;

    import android.widget.TextView;

    public class MainActivity extends Activity {
        private TextView tvCount;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //初始化控件
            tvCount=(TextView) findViewById(R.id.tvCount);
            new TimeCount(4000, 1000).start();//计时开始

        }

        //定义一个倒计时的内部类
        class TimeCount extends CountDownTimer{
            public TimeCount(long millisInFuture, long countDownInterval) {
                super(millisInFuture, countDownInterval);//参数依次为总时长,和计时的时间间隔
                
            }

            @Override
            public void onTick(long millisUntilFinished) {//计时过程显示
                tvCount.setText(millisUntilFinished/1000+"");
                
            }

            @Override
            public void onFinish() {//计时完毕时触发该方法
                Intent intent=new Intent(MainActivity.this, HomepageActivity.class);
                startActivity(intent);
                finish();//跳转activity后,关闭掉当前的额activity
                
            }
            
        }

    }



              有什么问题可以给我留言。

              我的微博http://weibo.com/laokuzai  安卓派,关注android最新资讯

              微信:zhuj8989,加微信畅聊android技术


    展开全文
  • 方法一 Timer与TimerTask(Java实现) public class timerTask extends Activity{ private int recLen = 11; private TextView txtView; Timer timer = new Timer(); ... public void onCreate(Bu

    方法一

    Timer与TimerTask(Java实现)

    public class timerTask extends Activity{  
     
        private int recLen = 11;  
        private TextView txtView;  
        Timer timer = new Timer();  
     
        public void onCreate(Bundle savedInstanceState){  
            super.onCreate(savedInstanceState);  
              
            setContentView(R.layout.timertask);  
            txtView = (TextView)findViewById(R.id.txttime);  
              
            timer.schedule(task, 1000, 1000);       // timeTask  
        }     
     
        TimerTask task = new TimerTask() {  
            @Override  
            public void run() {  
     
                runOnUiThread(new Runnable() {      // UI thread  
                    @Override  
                    public void run() {  
                        recLen--;  
                        txtView.setText(""+recLen);  
                        if(recLen < 0){  
                            timer.cancel();  
                            txtView.setVisibility(View.GONE);  
                        }  
                    }  
                });  
            }  
        };  
    }  



    方法二 
    TimerTask与Handler(不用Timer的改进型)

    public class timerTask extends Activity{  
        private int recLen = 11;  
        private TextView txtView;  
        Timer timer = new Timer();  
     
        public void onCreate(Bundle savedInstanceState){  
            super.onCreate(savedInstanceState);  
     
            setContentView(R.layout.timertask);  
            txtView = (TextView)findViewById(R.id.txttime);  
     
            timer.schedule(task, 1000, 1000);       // timeTask  
        }     
     
        final Handler handler = new Handler(){  
            @Override  
            public void handleMessage(Message msg){  
                switch (msg.what) {  
                case 1:  
                    txtView.setText(""+recLen);  
                    if(recLen < 0){  
                        timer.cancel();  
                        txtView.setVisibility(View.GONE);  
                    }  
                }  
            }  
        };  
     
        TimerTask task = new TimerTask() {  
            @Override  
            public void run() {  
                recLen--;  
                Message message = new Message();  
                message.what = 1;  
                handler.sendMessage(message);  
            }  
        };  
    }


    方法三

    Handler与Message(不用TimerTask)
    
    public class timerTask extends Activity{  
        private int recLen = 11;  
        private TextView txtView;  
     
        public void onCreate(Bundle savedInstanceState) {    
            super.onCreate(savedInstanceState);    
     
            setContentView(R.layout.timertask);   
            txtView = (TextView)findViewById(R.id.txttime);  
     
            Message message = handler.obtainMessage(1);     // Message  
            handler.sendMessageDelayed(message, 1000);  
        }    
     
        final Handler handler = new Handler(){  
     
            public void handleMessage(Message msg){         // handle message  
                switch (msg.what) {  
                case 1:  
                    recLen--;  
                    txtView.setText("" + recLen);  
     
                    if(recLen > 0){  
                        Message message = handler.obtainMessage(1);  
                        handler.sendMessageDelayed(message, 1000);      // send message  
                    }else{  
                        txtView.setVisibility(View.GONE);  
                    }  
                }  
     
                super.handleMessage(msg);  
            }  
        };  
    }  


    方法四 

    Handler与Thread(不占用UI线程)

    public class timerTask extends Activity{  
        private int recLen = 0;  
        private TextView txtView;  
     
        public void onCreate(Bundle savedInstanceState){  
            super.onCreate(savedInstanceState);  
     
            setContentView(R.layout.timertask);  
            txtView = (TextView)findViewById(R.id.txttime);  
              
            new Thread(new MyThread()).start();         // start thread  
        }     
     
        final Handler handler = new Handler(){          // handle  
            public void handleMessage(Message msg){  
                switch (msg.what) {  
                case 1:  
                    recLen++;  
                    txtView.setText("" + recLen);  
                }  
                super.handleMessage(msg);  
            }  
        };  
     
        public class MyThread implements Runnable{      // thread  
            @Override  
            public void run(){  
                while(true){  
                    try{  
                        Thread.sleep(1000);     // sleep 1000ms  
                        Message message = new Message();  
                        message.what = 1;  
                        handler.sendMessage(message);  
                    }catch (Exception e) {  
                    } 


    方法五

    Handler与Runnable(最简单型)  
    
    public class timerTask extends Activity{  
        private int recLen = 0;  
        private TextView txtView;  
     
        public void onCreate(Bundle savedInstanceState){  
            super.onCreate(savedInstanceState);  
     
            setContentView(R.layout.timertask);  
            txtView = (TextView)findViewById(R.id.txttime);  
              
            handler.postDelayed(runnable, 1000);  
        }     
     
        Handler handler = new Handler();  
        Runnable runnable = new Runnable() {  
            @Override  
            public void run() {  
                recLen++;  
                txtView.setText("" + recLen);  
                handler.postDelayed(this, 1000);  
            }  
        };  
    }  


    计时与倒计时 
    方法1,方法2和方法3,都是倒计时 
    方法4,方法5,都是计时 
    计时和倒计时,都可使用上述方法实现(代码稍加改动) 

    UI线程比较 
    方法1,方法2和方法3,都是在UI线程实现的计时; 
    方法4和方法5,是另开Runnable线程实现计时 

    实现方式比较 
    方法1,采用的是Java实现,即Timer和TimerTask方式; 
    其它四种方法,都采用了Handler消息处理 

    推荐使用 
    如果对UI线程交互要求不很高,可以选择方法2和方法3 
    如果考虑到UI线程阻塞,严重影响到用户体验,推荐使用方法4,另起线程单独用于计时和其它的逻辑处理 
    方法5,综合了前几种方法的优点,是最简的 

    展开全文
  • 所以为了不让用户痴痴地等,我们在进行某些耗时操作时,一般都要设计一个进度条或者倒计时器,让进度可视化,告诉用户“等待之后更精彩”。在使用短信验证码注册或者登录App就可以看到这样的设计:点击“发送验证码...

    等待总是让人感到焦急和厌烦的,特别是看不到进展的等待。所以为了不让用户痴痴地等,我们在进行某些耗时操作时,一般都要设计一个进度条或者倒计时器,让进度可视化,告诉用户“等待之后更精彩”。在使用短信验证码注册或者登录App就可以看到这样的设计:点击“发送验证码”的按钮之后,按钮上就会出现倒计时(一般为60秒),倒计时结束之后,按钮的文字就会变成“重新发送”。

    在Android中要实现这样的效果可以使用Handler发送消息,但其实还有一个已经封装好的抽象类可以帮上忙,那就是CountDownTimer,利用它,我们可以很轻松地实现倒计时。很久以前我就用过这个类,但是这几天写时发现了一个当初没有注意到的坑,因此打算写一篇博客记录下来。

    1、需求分析

    1. 点击按钮之后,按钮文字变为“ns后发送验证码”(n为倒计时读数);
    2. 为了让倒计时更加醒目,将秒数和单位设为蓝色;
    3. 倒计时结束之后,按钮的文字显示为“重新发送”。

    瞄一眼效果图:
    倒计时效果图

    2、工程创建和布局编写

    创建工程就不用多说了,由于我们只需要看到按钮上的倒计时效果,不必输入手机号码,所以只要在界面上简单地放置一个按钮即可:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="16dp"
        tools:context="com.lindroid.countdowndemo.MainActivity">
    
        <Button
            android:id="@+id/btn_captcha"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:background="#c7c7c7"
            android:text="获取验证码"
            android:textAllCaps="false"
            android:textColor="@android:color/black"
            android:textSize="18sp" />
    
    </RelativeLayout>

    3、如何使用CountDownTimer

    CountDownTimer倒计时器的使用并不难,我们可以创建一个类继承它,并实现它的构造函数和重写两个方法:

        private CountTimer countTimer;
    
        /**
         * 点击按钮后倒计时
         */
        class CountTimer extends CountDownTimer {
    
            public CountTimer(long millisInFuture, long countDownInterval) {
                super(millisInFuture, countDownInterval);
            }
    
            /**
             * 倒计时过程中调用
             *
             * @param millisUntilFinished
             */
            @Override
            public void onTick(long millisUntilFinished) {
    
            }
    
            /**
             * 倒计时完成后调用
             */
            @Override
            public void onFinish() {
    
            }
        }

    大体的框架如上所述,我来稍微解释一下。首先是构造函数,里面有两个参数:
    - millisInFuture:倒计时的总时间,单位为毫秒
    - countDownInterval:倒计时的时间间隔,单位为毫秒
    比如我想设置10秒的倒计时,每隔1秒就读一次数,那么初始化就可以将数值传入:

    CountTimer countTimer = = new CountTimer(10000, 1000);

    除了构造函数,还有两个方法,它们的作用分别如下:
    - onTick:倒计时过程中调用
    - onFinish:倒计时结束后调用

    那么怎么开启倒计时呢?只需要用countTimer去调用start方法就可以了。另外,为了节省资源,在Activity销毁时应该停止倒计时:

        @Override
        protected void onDestroy() {
            super.onDestroy();
            countTimer.cancel();
        }

    到这里,你应该知道怎么使用如何使用CountDownTimer了吧?如果还有疑问,可以在文末下载完整的代码。

    4、实现简单的倒计时效果

    现在我们先来实现点击按钮后就进行倒计时读数的效果,代码如下:

        CountTimer countTimer = new CountTimer(10000, 1000);
    
        /**
         * 点击按钮后倒计时
         */
        class CountTimer extends CountDownTimer {
    
            public CountTimer(long millisInFuture, long countDownInterval) {
                super(millisInFuture, countDownInterval);
            }
    
            /**
             * 倒计时过程中调用
             *
             * @param millisUntilFinished
             */
            @Override
            public void onTick(long millisUntilFinished) {
                Log.e("Tag", "倒计时=" + (millisUntilFinished/1000));
                btnCaptcha.setText(millisUntilFinished / 1000 + "s后重新发送");
                //设置倒计时中的按钮外观
                btnCaptcha.setClickable(false);//倒计时过程中将按钮设置为不可点击
                btnCaptcha.setBackgroundColor(Color.parseColor("#c7c7c7"));
                btnCaptcha.setTextColor(ContextCompat.getColor(context, android.R.color.black));
                btnCaptcha.setTextSize(16);
            }
    
            /**
             * 倒计时完成后调用
             */
            @Override
            public void onFinish() {
                Log.e("Tag", "倒计时完成");
                //设置倒计时结束之后的按钮样式
                btnCaptcha.setBackgroundColor(ContextCompat.getColor(context, android.R.color.holo_blue_light));
                btnCaptcha.setTextColor(ContextCompat.getColor(context, android.R.color.white));
                btnCaptcha.setTextSize(18);
                btnCaptcha.setText("重新发送");
                btnCaptcha.setClickable(true);
            }
        }

    倒计时的读数是实时的,毫无疑问应该在onTick方法中处理这些逻辑,倒计时完成后要将按钮文字改为“重新发送”,这个可以交给onFinish

    运行一下,点击按钮,倒计时成功出现了,但是再点几次,诡异的事情发生了:有时候倒计时读数会漏掉某个数字,比如从10直接就到8了,打印出来的日志是这样的:

    跳秒现象

    这……到底是怎么回事?少掉的一秒难道是被某人给续了么?

    5、CountDownTimer误差解决

    为了找回生命中的这一秒钟,我在一个技术群里和小伙伴们讨论了很久,最后算是逃过了时间黑洞的魔爪。

    我们采用的倒计时读数是将millisUntilFinished除于1000得到的,这里就有一个小小的陷阱了:millisUntilFinished是长整型变量,除于1000之后得到是整数部分。我们可以将millisUntilFinished的值打印出来看看:
    millisUntilFinished的值

    现在明白为什么看不到读数9了吗?那是因为程序执行虽然很快,但再快也是需要时间的,所以从10秒倒计时到9秒时,millisUntilFinished会比9000稍小一点,是8999,而长整型8999除于1000之后就得到8了。当然,既然是误差那就有多种情况,少掉的数字不一定是9,这里只是我针对我遇到的情况而言。

    知道原因之后就好办了,我们可以先将millisUntilFinished转换成double类型后再除于1000,这样就可以保留小数部分了,然后使用Math类中的round方法四舍五入,但是这样倒计时的话会从10到2,这显然不行,所以再减去1,让它从9到1。修改后的onTick方法代码是这样的:

            public void onTick(long millisUntilFinished) {
                //处理后的倒计时数值
                int time = (int) (Math.round((double) millisUntilFinished / 1000) - 1);
                btnCaptcha.setText(String.valueOf(time)+"s后重新发送");
                //设置倒计时中的按钮外观
                btnCaptcha.setClickable(false);//倒计时过程中将按钮设置为不可点击
                btnCaptcha.setBackgroundColor(Color.parseColor("#c7c7c7"));
                btnCaptcha.setTextColor(ContextCompat.getColor(context, android.R.color.black));
                btnCaptcha.setTextSize(16);
            }

    运行后试试,就可以发现失去的那一秒又回来啦。

    6、给倒计时读数和单位设置前景色

    给同一字符串中的不同字符设置不同的字体颜色,这就需要用到SpannableString与SpannableStringBuilder相关的知识了,限于篇幅,这里就不赘述了,可以参考这篇文章:SpannableString与SpannableStringBuilder。这里只简单介绍一下:

    6.1 拼接字符串

                int time = (int) (Math.round((double) millisUntilFinished / 1000) - 1);
                //拼接要显示的字符串
                SpannableStringBuilder sb = new SpannableStringBuilder();
                sb.append(String.valueOf(time));
                sb.append("s后重新发送");

    6.2 设置要显示的文字样式

                //字符“后”在字符串中的下标
                int index = String.valueOf(sb).indexOf("后");
                //给秒数和单位设置蓝色前景色
                ForegroundColorSpan colorSpan = new ForegroundColorSpan(ContextCompat.getColor(context, android.R.color.holo_blue_dark));
                sb.setSpan(colorSpan, 0, index, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
                btnCaptcha.setText(sb);

    这次运行之后就可以看到跟效果图一样的效果了。最后给一下源码:
    CountDownTimerDemo

    参考文章

    SpannableString与SpannableStringBuilder
    谷歌文档之CountDownTimer

    展开全文
  • android倒计时功能

    2016-09-05 14:26:40
    android中的倒计时功能,主要用于发送验证码以及其他。 我在这个项目里用于打卡。 //读卡倒计时逻辑 class TimeCount extends CountDownTimer { public TimeCount(long millisInFuture, long countDownInterval) ...

    android中的倒计时功能,主要用于发送验证码以及其他。

    我在这个项目里用于打卡。

     //读卡倒计时逻辑
        class TimeCount extends CountDownTimer {
            public TimeCount(long millisInFuture, long countDownInterval) {
                super(millisInFuture, countDownInterval);
            }
    
            public void onFinish() {
                bt_get_cart_id.setText("点击读卡");
                txtCode.setText("读卡超时 请重试");
                bt_get_cart_id.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        new Thread(runnable).start();//打卡用子线程
                        time.start();
                    }
                });
                ColseCom();
            }
    
            public void onTick(long millisUntilFinished) {
                bt_get_cart_id.setText("读卡中");
                bt_get_cart_id.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        bt_get_cart_id.setText("点击读卡");
                        bt_get_cart_id.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                new Thread(runnable).start();//打卡用子线程
                                time.start();
                            }
                        });
                        ColseCom();
                        time.cancel();
                    }
                });
            }
        }

    代码有点乱,只能作为参考。

    用法:

    TimeCount time = new TimeCount(6000,1000);//倒计时六秒


    展开全文
  • 所以为了不让用户痴痴地等,我们在进行某些耗时操作时,一般都要设计一个进度条或者倒计时器,让进度可视化,告诉用户“等待之后更精彩”。在使用短信验证码注册或者登录App就可以看到这样的设计:点击“发送验证码...
  • app 一般都会有倒计时功能,无论是引导页面,还是短信验证码填写。本文便讲解下简单的实现。 效果图 分析 这个小小的倒计时功能也有一些技巧,特别是对于初学者来说可能就是坑,比如你在ui线程进行倒计时10秒。...
  • 计时器和倒计时显示

    2016-01-29 10:11:13
    计时代码: //计时器声明 private boolean isPaused = false; private String mTime; private int timeUsedInsec; /** * 计时器线程 */ private Handler timeHandle = new Handler() {
  • MediaPlayer 与SurfaceHolder的使用:下面我先例举一个简单的小demojava代码: import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.support.v7.app....
  • 手机锁屏后,h5浏览器setTimeout暂停执行了,发送验证码的秒数或倒计时没有继续往下走,遇到这种问题可以用visibilitychange这种方式处理 // 监听页面隐藏(锁屏)或后台执行时,解决定时器不执行的问题 ...
  • 2017杭州云栖大会开幕在即,阿里云云效将在研发效能峰会、企业高效...2017杭州云栖大会倒计时!研发效能主题专场五大亮点抢先看 作者:云效平台 发表在:阿里云效平台 【云栖大会】刚刚成立的达摩院 是
  • 使用过MIUI的同学应该遇到过MIUI的app卸载动画,作为多年的米粉,当然要去尝试一下了...
  • 资料来自于 ...下面的代码实现了6s倒计时,计时后,自动停止计时并移除runnable. public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivi...
  • 关于代码家(干货集中营)共享的所有知识点Android部分的汇总,后续每周会对其进行更新 之前的分类总结点此,其中所有的知识点都包含在这个里面更多内容请选择以下入口 关于代码家(干货集中营)共享知识点汇总系列...
  • 2017杭州云栖大会开幕在即,阿里云云效将在研发效能峰会、企业高效研发实践论坛、代码规约和DevOps挑战赛等方面,全面提供研发效能理念和技术指导,让用户全程感受研发效能的技术魅力! 热点热议 2017杭州云栖...
  • 毕业倒计时 — 科班仔Java后端的点滴与学习路线规划 文章目录毕业倒计时 — 科班仔Java后端的点滴与学习路线规划一、前言二、选好方向—“站在风口上,猪都能上天”三、学习资源途径四、学校教的基础知识到底有多...
  • Android秒数转时间

    2015-09-08 16:10:53
    MediaPlayer可以取出总毫秒数,需要手动转换。 下面是转换代码。/* * 秒数转时间 * */ private String secondsToTime(int seconds) { StringBuilder time = new StringBuilder(); int min;
  • 下载地址 最后更新共计113个分类5177套源码29.2 GB。...│ │ Android TagCloudView云标签的灵活运用.rar │ │ Android 实现 标签 拖动 改变位置.rar │ │ android 流式布局和热门标签.zip │ │ ...
  • Android开发开源源代码

    2013-11-04 14:32:03
      1.Apollo音乐播放器 就一个很好的播放器,但是实现的特别好!...地址:https://github.com/Splitter/android_packages_apps_apolloMod 2.Oschina客户端 OSChina网站客户端,wp版
  • 博文学Android

    2018-12-22 10:51:24
    学习Android的过程中得到来自互联网上乐于分享和奉献的人们的帮助,这里收集了一些Android相关的知识点的介绍,研究,实践的博文地址。每篇文章将带给学习者更多的帮助,有些地址需要FQ的帮助。 基于Android API 22...
  • 文章太长,接上一篇。 │ Android应用源码之HTMLViewer.zip │ Android应用源码之http 演示Demo.zip │ Android应用源码之http.zip │ Android应用源码之http1.zip │ Android应用源码之IA...
1 2 3 4 5 ... 20
收藏数 1,086
精华内容 434
关键字:

读分倒计时代码android