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 等不同状态,通 ...
随机推荐
- Android minHeight/Width,maxHeight/Width
在layout文件中,设置IamgeView的最大(最小)高度(宽度)时,需要同时设置android:adjustViewBounds="true",这样设置才会生效.在代码中设置 ...
- PHP利用递归法获取多级类别的树状数组
数据结构:category(id, pid, name),对应:信息ID,父项ID,类别名 测试数据: $aryCate = array( array('id' => 1, 'pid' => ...
- 让2个并列的div根据内容自动保持同等高度js
有左右2个并列的div,2个div都不能限定高度.左div为导航,右div为内容.如何能让左div块自动获得和右div块相等的高度? 同时,也有网友提问到“如果右块高度比左块低,会不会导致左块的内容被 ...
- block 的调用 简单代码
#import <Foundation/Foundation.h> #import "Button.h" typedef int (^MySum) (int, int) ...
- cocos2d-x -------之笔记篇 3D动作说明
CCShaky3D::create(时间,晃动网格大小,晃动范围,Z轴是否晃动); //创建一个3D晃动的效果 CCShakyTiles3D::create(时间,晃动网格大小,晃动范围,Z轴是 ...
- Entity Framework 数据部分更新之Attach &&Detach
我们经常会遇到这样的问题:Update一个entity的部分数据时,通常需要new一个新的对象,然后事这新的对象Attach到Context中,代码如下所示: /// <summary> ...
- 《转》精巧好用的DelayQueue
该文章转自:http://www.cnblogs.com/jobs/archive/2007/04/27/730255.html 我们谈一下实际的场景吧.我们在开发中,有如下场景 a) 关闭空闲连接. ...
- android 添加左右滑屏手势
今天要在自己的项目中添加左右滑动,实现日期的加减(原来已经做了加减按键).滑动在一个中间的layout中进行 思路:添加左右划屏幕判断,得到判断后模拟加减按键按下. 模拟按键按下用 mbotton.p ...
- 30款javascript脚本插件 jquery插件大全
Shifty Nav - a Fully Responsive JS CSS3 Mega Menu Show Demo Shifty Nav is a fully responsive CSS3 ...
- Android消息机制不完全解析(下)
接着上一篇文章Android消息机制不完全解析(上),接着看C++部分的实现. 首先,看看在/frameworks/base/core/jni/android_os_MessageQueue.cpp文 ...