`

CountDownButton:倒计时的Button

阅读更多
使用CountDownTimer写的简洁明了
showToast("验证码已发送,请注意查收");
					
					int timer=60*1000;
					
					new CountDownTimer(timer, 1000) {  
					    public void onTick(long millisUntilFinished) {
					    	btn_code.setEnabled(false);
					    	btn_code.setText("获取验证码("+(millisUntilFinished / 1000)+")");  
					    }  
					    public void onFinish() {
					    	btn_code.setEnabled(true);
					    	btn_code.setText("获取验证码");
					    }  
					 }.start();  





没有使用CountDownTimer,基于倒计时的TextView而写,没什么特别的,代码:
import android.content.Context;
import android.os.Handler;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.widget.Button;

public class CountDownButton extends Button {
	private Runnable mTicker;
	private Handler mHandler;

	private boolean mTickerStopped = false;
	
	private OnCountDownListener onCountDownListener;//监听回调
	private int count=10;//倒计时的步数
	private CharSequence text;//原始文字
	public CountDownButton(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
		init();
	}
	public CountDownButton(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
		init();
	}
	public CountDownButton(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		// TODO Auto-generated constructor stub
		init();
	}

	private void init(){
		text=getText();
	}
	@Override
	protected void onDetachedFromWindow() {
		super.onDetachedFromWindow();
		mTickerStopped = true;
	}
	@Override
	protected void onAttachedToWindow() {
		mTickerStopped = false;
		super.onAttachedToWindow();
		mHandler = new Handler();

		/**
		 * requests a tick on the next hard-second boundary
		 */
		mTicker = new Runnable() {
			public void run() {
				if (mTickerStopped)
					return;
				if(count<=0){
					if (onCountDownListener != null)
						onCountDownListener.onFinish();
					return;
				}
				count--;
				setText(text+"("+count+")");
				if (onCountDownListener != null)
					onCountDownListener.onTick();
				invalidate();
				long now = SystemClock.uptimeMillis();
				long next = now + (1000 - now % 1000);
				mHandler.postAtTime(mTicker, next);
			}
		};
		mTicker.run();
	}
	
	public interface OnCountDownListener {
		public void onFinish();

		public void onTick();
	}

	public void setOnCountDownListener(OnCountDownListener onCountDownListener) {
		this.onCountDownListener = onCountDownListener;
	}

	public int getCount() {
		return count;
	}
	public void setCount(int count) {
		if(count<0){
			this.count=0;
                        return;
		}
		this.count = count;
	}
}


用法:
CountDownButton btn = (CountDownButton) findViewById(R.id.btn);
		btn.setCount(60);
		btn.setOnCountDownListener(new CountDownButton.OnCountDownListener() {

			@Override
			public void onTick() {
				// TODO Auto-generated method stub
				Log.i("tag", "onTick");
			}

			@Override
			public void onFinish() {
				// TODO Auto-generated method stub
				Log.i("tag", "onFinish");
			}
		});

没了!

自动获取短信验证码并填充以及倒计时
http://www.devstore.cn/code/info/827.html


用自定义Button实现ToggleButton
点击一个按钮,就会有按下的效果,再点击会弹起,实现一个类似ToggleButton的功能。
import android.content.Context; 
import android.util.AttributeSet; 
import android.widget.Button;

public class MyTextButton extends Button {

    private boolean checked;

    public MyTextButton(Context context, AttributeSet attrs) { 
        super(context, attrs); 
    }

    @Override 
    public boolean performClick() { 
        this.checked = !this.checked; 
        return super.performClick(); 
    }

    @Override 
    protected int[] onCreateDrawableState(int extraSpace) { 
        if (!checked) { 
            return Button.PRESSED_ENABLED_SELECTED_STATE_SET; 
        } else { 
            return Button.EMPTY_STATE_SET; 
        } 
    } 
}




Android TextView的子类实现了数字自动增长或减小:TextCounter
http://www.open-open.com/lib/view/open1426473122554.html
  • 大小: 12.3 KB
  • 大小: 61.7 KB
分享到:
评论

相关推荐

    Android代码-CountDownButton

    CountDownButton是一个具有倒计时功能的自定义按钮 下载 dependencies { compile 'com.white.countdownbutton:countdownbtn:1.0.4' } 使用 // 布局文件: // Activity代码: ... mCountDownButton = ...

    点击实现倒计时,按钮变成不可点击,倒计时结束,按钮重新可点击

    &lt;button id="countdownButton"&gt;点击开始倒计时&lt;/button&gt; ``` 接着,我们使用JavaScript来编写倒计时逻辑。倒计时的单位通常是秒,可以设定一个变量存储倒计时的总时间,然后用`setInterval`函数每隔一定时间(如1秒...

    iOS 倒计时按钮

    4. **事件处理**:倒计时结束后,可以通过重置`currentCount`为总时间,然后再次调用`startCountDown:`来重新开始倒计时。 ### 四、实际应用 在实际项目中,我们可能会根据业务需求对倒计时按钮进行更复杂的定制,...

    ReactNativeCountDownButton封装的一个倒计时按钮

    4. **props接口设计**:组件需要接受诸如`countDownTime`(倒计时秒数)、`onFinish`(倒计时结束回调)、`buttonText`(按钮文本)等props,以实现不同场景下的需求。 5. **事件处理**:点击事件的监听与处理,当...

    JKCountDownButton倒计时按钮

    在iOS开发中,倒计时按钮(CountDown Button)是一种常见的UI组件,它通常用于诸如验证码获取、限时优惠等场景,以提供用户一个有限时间内的交互功能。`JKCountDownButton`是一个专为此目的设计的自定义控件,它允许...

    js实现自动倒计时按钮30秒后可用.zip

    在JavaScript(JS)编程中,实现一个自动倒计时功能,让特定的按钮在30秒后变为可用,是一项常见的需求。这常用于验证码重发、预约系统或限时优惠等场景,以确保用户在执行关键操作前有足够的时间考虑。下面我们将...

    自己用js写的倒计时按钮

    &lt;button id="countdownButton"&gt;开始倒计时&lt;/button&gt; &lt;div id="countdownDisplay"&gt;&lt;/div&gt; ``` 在JavaScript中,我们这样编写代码: ```javascript document.getElementById('countdownButton').addEventListener('...

    js倒计时30秒才能点击跳转页面代码

    3. 使用`setInterval`创建一个定时器,每秒执行一次,直到倒计时结束。 4. 定时器的回调函数检查倒计时是否已结束。如果是,则清除定时器,跳转到指定URL;否则,更新按钮文本显示剩余秒数,并减少倒计时秒数。 5. ...

    Android自定义倒计时按钮

    首先,`CountdownButton`类继承自`Button`,这意味着它具备所有`Button`的基本功能,如文字显示、点击响应等,同时增加了倒计时的特性。通过`Context`参数的构造函数,`CountdownButton`可以与应用程序的上下文交互...

    android短息验证计时按钮

    项目名为"CountDownButton-master",暗示了这是一个关于倒计时按钮的主分支或完整实现,可能包含了源代码、资源文件以及必要的示例或者测试用例。开发者可以通过查阅源码来学习如何自定义Button的行为,如何与后台...

    Android 简单封装获取验证码倒计时功能

    首先,我们需要在`attrs.xml`文件中定义自定义视图`CountDownButton`的属性,包括总时长(`millisinfuture`)、间隔时长(`countdowninterva`)、正常状态的颜色(`normalColor`)以及倒计时状态的颜色(`...

    基于vue、react实现倒计时效果

    在当前的互联网应用开发中,倒计时效果是一项常见的功能需求,它广泛应用于如验证码发送、活动倒数、定时任务等场景。随着前端框架技术的发展,Vue和React成为了实现现代Web应用的主流工具。本文将介绍如何使用Vue和...

Global site tag (gtag.js) - Google Analytics