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 等不同状态,通 ...
随机推荐
- OC中给我们提供的一个技术:谓词(NSPredicate).note
OC中给我们提供的一个技术:谓词(NSPredicate)OC中的谓词操作是针对于数组类型的,他就好比数据库中的查询操作,数据源就是数组,这样的好处是我们不需要编写很多代码就可以去操作数组,同时也起到 ...
- c++常用IDE
vs2013. CodeLite (c/c++/PHP) codeBlocks Qt Creator Xcode
- Android ORM SQL Top 5
If you are developing an Android application, you will likely need to store data somewhere. You may ...
- 转:Server.MapPath相关
如果你从Page类继承的类中执行这条语句,才可以简单地使用 DataBase = Server.MapPath("data.mdb");否则写全命名空间:System.Web.Ht ...
- linux LVM 逻辑卷
fdisk pvcreate vgcreate lvcreate 查看显示 创建 删除 扩容 激活 扫描查找 LV lvdisplay lvcreate lvremove lvextend lvcha ...
- TCP/IP详解学习笔记 这位仁兄写得太好了
TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣 ...
- Python核心编程笔记--unicode编码
#定义编码方式,与物理文件. code='utf-8'file='D:/utf8.txt' #把编码后的字符写入文件. hello_out =u'hello world'bytes_out =hell ...
- 製程能力介紹(SPC introduction) ─ Cp之製程能力解釋
Cp之製程能力解釋 從常態分配的特性來看,在群體中 ±3σ(標準差) 之範圍內的值,應包含群體全部的 99.73%.也就是說,若以 6σ為單位,就可以代表整個分布的範圍,但是有 0.27% (2700 ...
- 在VC6.0下如何调用Delphi5.0开发的进程内COM
因为本人的语言水平很差,考大学时150的总分,我考了个60分.外语也是,初中及格过一次,会考及格过一次.其它的时间好像从没有及格过.所以我不写文章,因我一百字的文章给我写,至少要出八九个错别字.哈哈… ...
- boost库在工作(40)串行通讯
现代的计算机技术进步很快,各种的通讯也日新月异,像USB.网络.蓝牙.WIFI等通讯技术飞速地出现,改变了整个计算机的通讯能力,速度已经达到GBit级别.但是有一种最原始的通讯方式,还是保留了30年, ...