Android 获取验证码倒计时实现

作者: Swift社区 | 来源:发表于2017-09-12 13:49 被阅读196次

    1. 验证码输入框和获取验证码按钮布局

    xml代码:

            <LinearLayout 
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:background="@color/white"
                android:orientation="horizontal" >
    
                <EditText
                    android:id="@+id/phonetext"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:layout_marginLeft="15dp"
                    android:layout_gravity="center_vertical"
                    android:inputType="number"
                    android:hint="请输入短信验证码"
                    android:background="@null"/>
    
                <Button
                    android:id="@+id/timebutton"
                    android:layout_width="wrap_content"
                    android:layout_height="30dp"
                    android:layout_marginRight="15dp"
                    android:layout_marginTop="10dp"
                    android:textSize="16dp"
                    android:background="@drawable/tv_timemessage_bg"
                    android:text="获取"
                    />
    
            </LinearLayout>
    

    效果如下:

    效果图

    2. 根据id设置Button点击事件触发倒计时

    JAVA代码:

    /**
     * Created by fby on 2017/9/11.
     */
    public class ChargepsdActivity extends Activity {
    
        private Button timeButton;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_chargepsd);
    
            timeButton = (Button) findViewById(R.id.timebutton);
            //new倒计时对象,总共的时间,每隔多少秒更新一次时间
            final MyCountDownTimer myCountDownTimer = new MyCountDownTimer(60000,1000);
    
            //设置Button点击事件触发倒计时
            timeButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    myCountDownTimer.start();
                }
            });
    
        }
    

    3. 倒计时函数

    
        //倒计时函数
        private class MyCountDownTimer extends CountDownTimer {
    
            public MyCountDownTimer(long millisInFuture, long countDownInterval) {
                super(millisInFuture, countDownInterval);
            }
    
            //计时过程
            @Override
            public void onTick(long l) {
                //防止计时过程中重复点击
                timeButton.setClickable(false);
                timeButton.setText(l/1000+"秒");
    
            }
    
            //计时完毕的方法
            @Override
            public void onFinish() {
                //重新给Button设置文字
                timeButton.setText("重新获取");
                //设置可点击
                timeButton.setClickable(true);
            }
        }
    
    }
    

    4. 清除倒计时函数,解决验证码输入正确后停止计时

    private void clearTimer() {
            if (task != null) {
                task.cancel();
                task = null;
            }
            if (timer != null) {
                timer.cancel();
                timer = null;
            }
        }
    

    希望可以帮助大家
    如果哪里有什么不对或者不足的地方,还望读者多多提意见或建议
    Android技术交流群:591625129

    相关文章

      网友评论

      • NN又回来了:如果验证码输入正确的话,就会自动停止时间的吗?我先看看这个倒计时的类咯!
        Swift社区:@pull2car 类似时间走完,写一个清除倒计时的函数
        NN又回来了:@L展菲Q onFinish里面不是在时间走完了以后,才执行的吗?
        Swift社区:不会自动停止。如果想实现,可以做判断,当验证码输入正确的情况下,走onFinish停止计时

      本文标题:Android 获取验证码倒计时实现

      本文链接:https://www.haomeiwen.com/subject/jhscsxtx.html