自定义Button实现倒计时效果
来源:互联网 发布:cbox正在解析直播数据 编辑:程序博客网 时间:2024/05/21 08:58
实现的效果:
(1)创建一个CustomButton类继承Button:
package com.example.administrator.customview;import android.content.Context;import android.content.res.TypedArray;import android.os.Handler;import android.os.Message;import android.util.AttributeSet;import android.widget.Button;import java.util.Timer;import java.util.TimerTask;/** * Created by Administrator on 2016/10/12. * 提示:因为此类继承了Button,所以Button的属性和方法都可以在此类中直接调用 */public class CustomButton extends Button { private Timer timer; //轮询器 private int mMaxnum; //倒计时的时间 private String mSend; //button上显示的内容 /** * 通过Handler来获取轮询器(子线程)中的内容,然后在主线程中更新UI */ private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); int what = msg.what; if (what == 0) { //倒计时进行中 //直接调用自己的方法 setText("" + mMaxnum); } if (what == 1) { //倒计时结束,重置mMaxnum mMaxnum = 10; setEnabled(true); setText(mSend); } } }; /** * 在代码中初始化控件时走此构造方法 * @param context */ public CustomButton(Context context) { super(context); } /** * 有自定义属性(res-values-attrs.xml)时走此构造方法 * @param context * @param attrs 属性 从xml布局中传递过来的属性 */ public CustomButton(Context context, AttributeSet attrs) { super(context, attrs); //获取在values-attrs.xml中声明的属性 TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CustomButton); mMaxnum = typedArray.getInteger(R.styleable.CustomButton_maxnum,60); mSend = typedArray.getString(R.styleable.CustomButton_send); //把自定义的属性值设置给button setSend(mSend); setMaxNum(mMaxnum); } //设置按钮初始文字 public void setSend(String send) { this.mSend = send; } //设置最大时间 public void setMaxNum(int maxNum) { this.mMaxnum = maxNum; } //开始倒计时的方法 public void startCountDown() { //开始倒计时的时候要禁止再次点击 setEnabled(false); timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { if (mMaxnum <= 0) { timer.cancel(); mHandler.sendEmptyMessage(1); return; } mMaxnum --; mHandler.sendEmptyMessage(0); } }, 0, 1000); }}
<?xml version="1.0" encoding="utf-8"?><resources> <!--声明属性--> <declare-styleable name="CustomButton"> <!--name:自定义view的名字--> <attr name="maxnum" format="integer"/> <!--name:属性名。format: 属性的类型--> <attr name="send" format="string|reference"/> </declare-styleable></resources>
(3)自定义Button对应的布局文件:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:id="@+id/root" android:layout_width="match_parent" android:layout_height="match_parent"> <!--引入自定义的view。 在这里面定义相应控件的属性值--> <com.example.administrator.customview.CustomButton android:id="@+id/btn_custom" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="获取验证码" android:textSize="18sp" android:textColor="#f00" app:maxnum="10" app:send="再次获取验证码"/></RelativeLayout>
(4)在MainActivity(这里我改成里CustomActivity)中初始化自定义的Button,并对其设置监听事件:
package com.example.administrator.customview;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Toast;/** * Created by Administrator on 2016/10/12. */public class CustomActivity extends AppCompatActivity { private CustomButton mCustomBtn; //自定义的Button @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.custom_button); //自定义的布局文件 initView(); } private void initView() { mCustomBtn = (CustomButton) findViewById(R.id.btn_custom); //对button按钮设置监听事件,点击后开始倒计时 mCustomBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(CustomActivity.this, "验证码已发送", Toast.LENGTH_SHORT).show(); //调用自定义button的开始倒计时的方法 mCustomBtn.startCountDown(); } }); }}
经过上面四步便能实现一个简单的倒计时效果。
1 0
- 自定义Button实现倒计时效果
- 自定义倒计时button
- 自定义倒计时Button
- 自定义Button之实现点击按钮实现倒计时功能
- 自定义Button 实现Flex Button 描边效果。
- 自定义Button 实现Flex Button 描边效果。
- 自定义Button点击效果
- Button自定义点击效果
- Android -- 倒计时Button的实现
- android 带倒计时效果的Button
- Jquery实现倒计时效果
- JavaScript实现倒计时效果
- js实现倒计时效果
- JavaScript实现倒计时效果
- jquery实现倒计时效果
- jQuery实现倒计时效果
- JS实现倒计时效果
- js实现倒计时效果
- 3.6 线性表的链式存储结构
- Essential c++2.2调用函数
- 20161012
- js中==比较符的原则
- 【计算机常见问题】WIFI能连上,但是不能上网。(能ping通外网,但无法打开网页)
- 自定义Button实现倒计时效果
- c!!#获取系!!!统启!!!!动!后经!过的时!!!!间
- iscsi用gfs2文件系统实现磁盘共享
- python学习笔记一
- 349. Intersection of Two Arrays
- 233 Matrix hdu 5015(矩阵快速幂)
- hdu 1505 1506 2870 dp小礼包
- ubuntu16.04+Cuda8.0+CuDnn v5+OpenCV3.1.0+Matlab2014+Python+Caffe安装
- (9)金融资产的计量