Android倒计时Button
最近做用户绑定,需要用到倒计时的一个Button,就花点时间封装了一个,非常简单,效果图如下:

1.TimeButton 自定义倒计时Button
package com.example.timebutton; import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button; /**
* 时间控制的Button
*
* @author xue
* @time 2014-02-26 10:53:55
*
*/
public class TimeButton extends Button {
private int time, tempTime;
private String subText; public final int TIME_START = 0x10;
public final int TIME_REDUCE = 0x11;
public final int TIME_END = 0x12; public final String GONING_TAG = "TAG_GONGING";
public final String END_TAG = "TAG_END"; public TimeButton(Context context) {
super(context);
// TODO Auto-generated constructor stub
} public TimeButton(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
} public TimeButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
} private Handler handler = new Handler() { @Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
switch (msg.what) {
case TIME_START:
setTag(GONING_TAG);
break;
case TIME_REDUCE:
setText("(" + tempTime-- + ")" + "秒后重新" + subText);
break;
case TIME_END:
setTag(END_TAG);
setText(subText);
tempTime = time;
break;
default:
break;
}
} }; /**
* 继承OnclickListener,用于设置Onclick监听器时向上转型
*
* @author xue
*
*/
public class TimeOnclickListener implements OnClickListener { // 用于判断是否在倒计时完成后执行一系列动作
public boolean END_TAG = true; @Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (v.getTag() != null && v.getTag().equals(GONING_TAG)) {
END_TAG = false;
return;
}
setText(tempTime + "");
new Thread(new Runnable() { @Override
public void run() {
// TODO Auto-generated method stub
// 开始倒计时
handler.sendEmptyMessage(TIME_START);
while (tempTime >= 0) {
// 正在倒计时
handler.sendEmptyMessage(TIME_REDUCE);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 倒计时结束
END_TAG = true;
handler.sendEmptyMessage(TIME_END);
}
}).start(); } } /**
* 设置倒计时时间
*
* @param time
*/
public void setTime(int time) {
this.time = time;
this.tempTime = time;
} /**
* 设置倒计时过程中的文字
*
* @param subText
*/
public void setSubText(String subText) {
this.subText = subText;
}
}
2.MainActivity
package com.example.timebutton; import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Toast; /**
* 主界面
*
* @author xue
* @time 2014-02-26 15:34:51
*
*/
public class MainActivity extends Activity { private TimeButton time; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); initView();
setListener();
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} private void initView() {
time = (TimeButton) findViewById(R.id.timebutton);
time.setTime(60); // 设置倒计时时间
time.setSubText("发送");
} private void setListener() {
time.setOnClickListener(time.new TimeOnclickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
super.onClick(v);
if (this.END_TAG) // 如果不加判断,则每次点击Button都会执行下面这句话
Toast.makeText(MainActivity.this, "已发送!", 1000).show();
} });
}
}
OK,一个简单的倒计时Button就完了。
Android倒计时Button的更多相关文章
- android倒计时(整理)
android倒计时 用到CountDownTimer Android中文API(143) —— CountDownTimer 前言 本章内容android.os.CountDownTime章节,版本 ...
- Android倒计时功能的实现
Android中的倒计时的功能(也能够直接使用CountDownTimer这个类直接实现,相关此Demo可查看我的博客).參考了网上写的非常好的一个倒计时Demo: watermark/2/text/ ...
- Android中Button的五种监听事件
简单聊一下Android中Button的五种监听事件: 1.在布局文件中为button添加onClick属性,Activity实现其方法2.匿名内部类作为事件监听器类3.内部类作为监听器4.Activ ...
- Android之Button自定义点击效果
我们在界面上经常会用到button按钮,但通常button点击后看不到点击的效果,如果用户连续点击了两次,就会报NAR错误,这样交互性就比较差了.如果我们自定义了button点击效果,比如我们点击了b ...
- Android实现Button事件的处理
Android实现Button事件的处理 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 代码实现 首先是最基本的线性布局,给每个控件设立id值,以供代 ...
- 加载程序到android虚拟机报错: android.widget.RelativeLayout cannot be cast to android.widget.Button
05-23 02:53:48.416: E/Trace(875): error opening trace file: No such file or directory (2) 05-23 02:5 ...
- Android 给Button加个监听
1.日期设置控件:DatePickerDialog 2.时间设置控件:TimePickerDialog 实例代码 1.页面添加两个Button,单击分别显示日期设置控件和时间设置控件,还是有TextV ...
- Xamarin for android:为button设置click事件的几种方法
原文:Xamarin for android:为button设置click事件的几种方法 在Xamarin中一个最基础的事情,就是为一个button指定click事件处理方法,可是即使是这么一件事也有 ...
- Android根据Button状态(normal,focused,pressed)显示不同背景图片
Android根据Button状态(normal,focused,pressed)显示不同背景图片 Android中Button 有focused, selected, pressed 等不同状态,通 ...
随机推荐
- EC读书笔记系列之10:条款16、17
条款18 让接口容易被正确使用,不易被误用 记住: ★“促进正确使用”的办法包括接口的一致性,以及与内置类型的行为兼容 ★“阻止误用”的办法包括建立新类型.限制类型上的操作,束缚对象值,以及消除客户的 ...
- NodeJS爬虫系统初探
NodeJS爬虫系统 NodeJS爬虫系统 0. 概论 爬虫是一种自动获取网页内容的程序.是搜索引擎的重要组成部分,因此搜索引擎优化很大程度上是针对爬虫而做出的优化. robots.txt是一个文本文 ...
- php程序员的弱点
今天在在知乎上看到一个问题,题目是<看了laravel的php框架怎么感觉很不靠谱?>,我最近也在想学习一下laravel,laravel听说是受到很大ruby on rails的影响. ...
- 删除字符串中多余的空白字符和空行(C语言实现)
要求:处理一个字符串,删除字符串中多余的空格.水平制表符和空行,并满足下列要求: (1)对原字符串只能进行一次扫描.(2)不允许申请新的空间.(3)处理后的字符串的首尾不能有空格.制表符和空行.(4) ...
- 解决Qt程序发布时中文乱码问题(通过QApplication.addLibraryPath加载QTextCodec插件)
Qt程序的文字编码,是通过插件来解决的,所以我们发布的时候需要把相应的插件也发布出去,在开发者电脑上程序会自动从插件目录加载到插件,但是如果发布给别的电脑使用,需要手动指定插件路径,如下所示: int ...
- ios jsbrige
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- rsyslog 配置
在Debian环境下: 1,配置文件在/etc/rsyslogd.conf下: 2,如果要增加配置,并且不想直接修改rsyslogd.conf文件,可以在/etc/rsyslog.d/目录下增加文件, ...
- c#搭建服务端 准备工作(1)
思路 搭建服务器主要为了接收客户端所传来的数据,在学习过程中,整体的搭建逻辑大体分为以下几个步骤: 1.启动线程监听服务端口 2.监听客户端链接并进行处理 3.接收客户端传入的消息 4.向客户端回传( ...
- 调用父类Controller错误
在写一个控制器的时候,要特别注意本类继承的父类.不要继承错了.如图: ,这样就会一直是显示父类的控制器,而不是显示本类的控制器视图. 应该改为: 这些都是平时遇到的一些小问题,留着提醒自己.
- HDU Exponentiation 1063 Java大数题解
Exponentiation Time Limit: 1000/500 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...