Android自定义倒计时按钮

本文实例为大家分享了Android自定义倒计时按钮的具体代码,供大家参考,具体内容如下

效果

代码:

package com.dylan.frame.ui;

import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;

import java.util.Timer;
import java.util.TimerTask;

/**
 * 自定义倒计时按钮
 * <p/>
 *
 * @author Dylan
 *     <p/>
 *     [佛祖保佑 永无BUG]
 *     Created by Dylan on 2015/11/5 0005.
 */
public class CountdownButton extends Button implements View.OnClickListener {
  private long lenght = 60 * 1000;//默认倒计时时间;
  private long time;//倒计时时长
  private Timer timer;//开始执行倒计时
  private TimerTask timerTask;//每次倒计时执行的任务
  private String beforeText = "点击获取验证码";
  private String afterText = "秒后重新获取";
  private OnClickListener onClickListener;//按钮点击事件
  /**
   * 更新显示的文本
   */
  private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
      super.handleMessage(msg);
      CountdownButton.this.setText(time / 1000 + afterText);
      time -= 1000;
      if (time < 0) {
        CountdownButton.this.setEnabled(true);

        CountdownButton.this.setText(beforeText);

        clearTimer();
      }
    }
  };

  public CountdownButton(Context context) {
    super(context);
    this.setText(beforeText);
    setOnClickListener(this);
  }

  public CountdownButton(Context context, AttributeSet attrs) {
    super(context, attrs);
    setOnClickListener(this);
  }

  public CountdownButton(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    setOnClickListener(this);
  }

  /**
   * 清除倒计时
   */
  private void clearTimer() {
    if (timerTask != null) {
      timerTask.cancel();
      timerTask = null;
    }
    if (timer != null) {
      timer.cancel();
      timer = null;
    }
  }

  /**
   * 设置倒计时时长
   *
   * @param lenght 默认毫秒
   */
  public void setLenght(long lenght) {
    this.lenght = lenght;
  }

  /**
   * 设置未点击时显示的文字
   *
   * @param beforeText
   */
  public void setBeforeText(String beforeText) {
    this.beforeText = beforeText;
  }

  /**
   * 设置未点击后显示的文字
   *
   * @param beforeText
   */
  public void setAfterText(String afterText) {
    this.afterText = afterText;
  }

  /**
   * 点击按钮后的操作
   *
   * @param v
   */
  @Override
  public void onClick(View v) {
    if (onClickListener != null) {
      onClickListener.onClick(v);
    }
    initTimer();
    this.setText(time / 1000 + afterText);
    this.setEnabled(false);
    timer.schedule(timerTask, 0, 1000);
  }

  /**
   * 初始化时间
   */
  private void initTimer() {
    time = lenght;
    timer = new Timer();
    timerTask = new TimerTask() {
      @Override
      public void run() {
        handler.sendEmptyMessage(1);
      }
    };
  }

  /**
   * 设置监听按钮点击事件
   *
   * @param onclickListener
   */
  @Override
  public void setOnClickListener(OnClickListener onclickListener) {
    if (onclickListener instanceof CountdownButton) {
      super.setOnClickListener(onclickListener);

    } else {
      this.onClickListener = onclickListener;
    }

  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android实现倒计时的按钮的示例代码

    最近有人问我如何实现倒计时的按钮功能,例如发送验证码,我记得有个CountDownTimer,因为好久没用过了,自己就写了一个,代码如下 new CountDownTimer(10000, 1000) { @Override public void onTick(long millisUntilFinished) { btn2.setEnabled(false); btn2.setText(String.format("%ds后重新发送验证码",millisUntilFinished/

  • Android开发之获取短信验证码后按钮背景变化并且出现倒计时

    目前越来越多的app在注册或是进行对应操作时,要求获取短信验证码,在点击了获取短信验证码的按钮后,就是出现倒计时,比如倒计时120S,在倒计时期间内,按钮背景变化并且出现倒计时,当倒计时结束后,如果你没有获取到验证码,可以再次点击. 代码如下所示: VerCodeTimer mVerCodeTimer=(Button) findViewById(R.id.login_get_ver_code); private class VerCodeTimer extends CountDownTimer

  • Android自定义View获取注册验证码倒计时按钮

    在Android开发中,我们不可避免的会做到注册功能,而现在的注册大多数都是用手机去注册的,那么注册的时候都会要求用获取验证码的方式去验证,我们接下来就来实战一下自定义获取验证码倒计时按钮: 1.先看效果图 2.我们涉及到的变量 //倒计时时长,可设置 /** * 倒计时时长,默认倒计时时间60秒: */ private long length = 60 * 1000; //在点击按钮之前按钮所显示的文字 /** * 在点击按钮之前按钮所显示的文字,默认是获取验证码 */ private Str

  • Android自定义倒计时按钮

    本文实例为大家分享了Android自定义倒计时按钮的具体代码,供大家参考,具体内容如下 效果 代码: package com.dylan.frame.ui; import android.content.Context; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.view.View; import android.widget.But

  • Android 自定义返回按钮的实例详解

    Android 自定义返回按钮的实例详解 程序中我们有时候想让放回按钮按照自己的需求调整页面而不是单纯的按照系统返回上一级,这个问题很简单,重写 onKeyDown 方法即可. 下面方法,包含了 webview 中的返回上一页和普通 activity 的单击设置和双击退出程序. @Override public boolean onKeyDown(int keyCode, KeyEvent event) { //如果我们用的是webview页面,想返回网页的上一页设置这里就可以了 if (key

  • Android自定义悬浮按钮效果

    本文实例为大家分享了Android自定义悬浮按钮效果的具体代码,供大家参考,具体内容如下 以下:内容没有参考,写的也是一个比较简单的例子,主要就是应用切换前后台时会显示/隐藏悬浮窗.内容仅用于自我记录学习使用. 项目的开发时应用在登陆后显示一个悬浮窗,同时显示在线人数等一些其他信息,点击悬浮按钮可以显示全局弹窗名单.开发完成后,觉着需要记录一下这种实现方式.所以写一个简单的Demo. Demo思路是通过启动Service来添加/移除 悬浮窗,因为是一个全局悬浮窗,所以选择依附于Service.

  • android自定义倒计时控件示例

    自定义TextView控件TimeTextView代码: 复制代码 代码如下: import android.content.Context;import android.content.res.TypedArray;import android.graphics.Paint;import android.text.Html;import android.util.AttributeSet;import android.widget.TextView; import com.new0315.R;

  • Android自定义DigitalClock控件实现商品倒计时

    本文实例为大家分享了DigitalClock实现商品倒计时的具体代码,供大家参考,具体内容如下 自定义DigitalClock控件: package com.veally.timesale; import java.util.Calendar; import android.content.Context; import android.database.ContentObserver; import android.os.Handler; import android.os.SystemClo

  • Android自定义TimeButton实现倒计时按钮

    项目需要要实现一个带有倒计时功能的按钮,其效果类似发送验证码之后在按钮上显示倒计时并且将按钮设置为不可用的功能. 为了项目中其他地方能够调用到,便重写了一个继承于Button的TimeButton来实现倒计时功能,并方便调用. 老规矩,上效果图: 逻辑也不复杂,直接上代码: 首先新建一个App.class继承于Application package com.example.xuboyu.myapplication; /** * 用于存放倒计时时间 * @author bnuzlbs-xuboyu

  • Android 自定义View之倒计时实例代码

    Android 自定义View之倒计时实例代码 需求: 大多数app在注册的时候,都有一个获取验证码的按钮,点击后,访问接口,最终用户会收到短信验证码.为了不多次写这个获取验证码的接口,下面将它自定义成一个view,方便使用. 分析一下,这是一个TextView,点击的时候变色,不能再点击,同时里面的倒计时开始显示.那么就有了下面的代码 代码: /** * 通过selector选择器来改变背景,其中倒计时运行时为android:state_enabled="true", * 不显示倒计

  • android自定义按钮示例(重写imagebutton控件实现图片按钮)

    由于项目这种类型的图片按钮比较多,所以重写了ImageButton类. 复制代码 代码如下: package me.henji.widget; import android.content.Context;import android.graphics.ColorMatrix;import android.graphics.ColorMatrixColorFilter;import android.util.AttributeSet;import android.view.MotionEvent

  • 自定义滑动按钮为例图文剖析Android自定义View绘制

    自定义View一直是横在Android开发者面前的一道坎. 一.View和ViewGroup的关系 从View和ViewGroup的关系来看,ViewGroup继承View. View的子类,多是功能型的控件,提供绘制的样式,比如imageView,TextView等,而ViewGroup的子类,多用于管理控件的大小,位置,如LinearLayout,RelativeLayout等,从下图可以看出 从实际应用中看,他们又是组合关系,我们在布局中,常常是一个ViewGroup嵌套多个ViewGro

随机推荐