編輯:關於Android編程
1 直接上圖

2 原理
原理很簡單,就是把相應的倒計時邏輯等封裝到一個控件中,並向外部提供接口。
3 代碼
import java.util.Timer;
import java.util.TimerTask;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.FrameLayout;
/**
* 自定義控件,實現倒計時功能。
*
* @author Admin
*
*/
public class DaoJiShi extends FrameLayout {
private static final int jishi = 0x000;
private SmartButton9 daojishi;
private Handler handler;
private Timer timer;
private int allTime = 50;
private DaoJiShiCallBack daojishicallback;
public DaoJiShi(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.daojishi, this);
initView();
initHandler();
initListerner();
}
public DaoJiShi(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.daojishi, this);
initView();
initHandler();
initListerner();
}
public DaoJiShi(Context context) {
super(context);
// TODO Auto-generated constructor stub
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.daojishi, this);
initView();
initHandler();
initListerner();
}
public void initView() {
daojishi = (SmartButton9) findViewById(R.id.daojishi_btn);
}
public void initListerner() {
daojishi.setMyOnClick(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (daojishicallback != null) {
if (daojishicallback.Start()) {
// 手機號驗證通過了,那麼繼續下面的操作。
} else {
// 手機號驗證未通過,直接返回了,不執行下面的操作。
return;
}
} else {
// 回調接口為空,有問題,直接返回了,不執行下面的操作。
return;
}
daojishi.setClickable(false);
// 按鈕按下時創建一個Timer定時器
timer = new Timer();
// 創建一個TimerTask
// TimerTask是個抽象類,實現了Runnable接口,所以TimerTask就是一個子線程
TimerTask timerTask = new TimerTask() {
// 倒數allTime秒,默認50秒。
int i = allTime;
@Override
public void run() {
// Log.d(debug, run方法所在的線程:
// + Thread.currentThread().getName());
// 定義一個消息傳過去
Message msg = new Message();
msg.what = i--;
handler.sendMessage(msg);
if (i < 0) {
cancel();
}
}
};
// 定義計劃任務,根據參數的不同可以完成以下種類的工作:
// 1.schedule(TimerTask task, Date when) ー> 在固定時間執行某任務
// 2.schedule(TimerTask task, Date when, long
// period) ー> 在固定時間開始重復執行某任務,重復時間間隔可控
// 3.schedule(TimerTask task, long delay) ー> 在延遲多久後執行某任務
// 4.schedule(TimerTask task, long delay, long
// period) ー> 在延遲多久後重復執行某任務,重復時間間隔可控
timer.schedule(timerTask, 1, 1000);// 3秒後開始倒計時,倒計時間隔為1秒
}
});
}
public void initHandler() {
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
daojishi.setText(msg.what + 秒後
重新獲取);
if (daojishicallback != null) {
daojishicallback.numChanged(msg.what);
}
if (msg.what == 0) {
daojishi.setText(獲取驗證碼);
daojishi.setClickable(true);
if (daojishicallback != null) {
daojishicallback.End();
}
}
}
};
}
public void stop() {
timer.cancel();
daojishi.setText(獲取驗證碼);
daojishi.setClickable(true);
}
public void start() {
daojishi.performClick();
}
public void setDaojishicallback(DaoJiShiCallBack daojishicallback) {
this.daojishicallback = daojishicallback;
}
public void setAllTime(int allTime) {
this.allTime = allTime;
}
/**
* 倒計時控件回調外部代碼的接口。
*
* @author Admin
*
*/
public interface DaoJiShiCallBack {
/**
* 點擊按鈕後,開始計時前調用的方法。
*
* @return 返回true會開始計時,false會退出計時。
*/
public boolean Start();
/**
* 結束啦。
*/
public void End();
/**
* 數字發生變化了。
*
* @param num
* @return
*/
public void numChanged(int num);
}
}
版權聲明:本文為博主原創或翻譯文章,未經博主允許不得轉載。
Android 實現蘑菇街購物車動畫效果
版本:1.0 日期:2014.8.6版權:© 2014 kince 轉載注明出處 使用過蘑菇街的用戶基本上都知道有一個加入購物車的動畫效果,此處不具體描述想知道
研究稱 Android 4.4 比 iOS 7.1 更穩定
根據Crittercism 發布的《移動體驗基准測試報告(需要注冊)》,研究人員在2582款設備上測試了106種操作系統和691個網絡運營商,結果顯示And
Android中SparseArray性能優化的使用方法
之前一篇文章研究完橫向二級菜單,發現其中使用了SparseArray去替換HashMap的使用.於是乎自己查了一些相關資料,自己同時對性能進行了一些測試。首先先說一下Sp
Android簽名方法詳解
1. 工具包文件 2. build-signer.xml文件<project name="jarsigner" def