android實現倒計時
『壹』 android 怎麼在button上添加倒計時
最簡單的兩種方法吧
開啟一個定時器 (timer 、 countDownTimer) 然後每隔1s 通過handler 讓button 裡面的文字改變一下 就是倒計時了
基本跟第一個相同。自定義一個類 繼承button 然後 裡面寫定時器 settext()
『貳』 怎麼在android懸浮窗口上實現倒計時
public class XuanfuTestActivity extends Activity {
/** Called when the activity is first created. */
int num=10;
String text;
Button button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button=new Button(getApplicationContext());//這里不能寫this 否則沒有效果
WindowManager wmManager=(WindowManager)getApplicationContext(). getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams params=new WindowManager.LayoutParams();
params.type=WindowManager.LayoutParams.TYPE_PHONE ;
params.type=2002;
params.flags=40;
params.width=50;
params.height=50;
wmManager.addView(button, params);
handler.sendEmptyMessageDelayed(1, 1000);
}
Handler handler=new Handler(){
public void handleMessage(android.os.Message msg) {
if (msg.what==1) {
text=""+num--;
button.setText(text);
}
if (num<=0) {
num=0;
}else {
handler.sendEmptyMessageDelayed(1, 1000);
}
};
};
}
『叄』 android 用 service 和 CountDownTimer 實現一個倒計時器的功能
在平時我們編程的時候,經常會用到倒計時這個功能,很多人不知道Android已經幫封裝好了一個類,往往都自己寫。現在發現了這個類,大家共享一下:
在一個TextView不斷顯示剩下的時間,代碼如下:
[java] view plain
private TextView vertifyView;
private CountDownTimer timer = new CountDownTimer(10000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
vertifyView.setText((millisUntilFinished / 1000) + "秒後可重發");
}
@Override
public void onFinish() {
vertifyView.setEnabled(true);
vertifyView.setText("獲取驗證碼");
}
};
調用的時候很簡單:timer.start();
最後說明一下:CountDownTimer timer = new CountDownTimer(10000, 1000)中,第一個參數表示總時間,第二個參數表示間隔時間。意思就是每隔一秒會回調一次方法onTick,然後10秒之後會回調onFinish方法。
『肆』 android 實現同時多個倒計時效果怎麼做
安卓實現同時多個倒計時效果的步驟:
我們首先需要在輸入框中輸入一個秒數,比如:12,然後獲取輸入框中的值,顯示在一個TextView中;
點擊「開始倒計時」按鈕,每隔一秒鍾,秒數減1,然後顯示在TextView中;
點擊「停止倒計時」按鈕,計時器停止運行,當再次點擊「開始倒計時」按鈕,計時器繼續運行。
平時用的每個商品都應該有兩個屬性值,這里叫它deadLine和isOvere吧,表示商品的到期時間和是否到期,那麼倒計時可以考慮這么實現:設置一個主計時器,每隔1秒發出消息告訴GridView現在的時間,GridView的Item獲得這個時間之後就和deadLine比較,如果已經到deadline了,就把數據源中的這項標記成已到期(修改isOvere的值為true);沒到deadline,就計算還差多少時間,顯示到GridView的Item里。
『伍』 android多個計時器會影響性能嗎
不會。安卓實現同時多個倒計時效果的步驟:
1、首先需要在輸入框中輸入一個秒數,比如:12,然後獲取輸入框中的值,顯示在一個TextView中;
2、點擊「開始倒計時」按鈕,每隔一秒鍾,秒數減1,然後顯示在TextView中;
3、點擊「停止倒計時」按鈕,計時器停止運行,當再次點擊「開始倒計時」按鈕,計時器繼續運行。
4、平時用的每個商品都應該有兩個屬性值,這里叫它deadLine和isOvere吧,表示商品的到期時間和是否到期,那麼倒計時可以考慮這么實現:設置一個主計時器,每隔1秒發出消息告訴GridView現在的時間,GridView的Item獲得這個時間之後就和deadLine比較,如果已經到deadline了,就把數據源中的這項標記成已到期(修改isOvere的值為true);沒到deadline,就計算還差多少時間,顯示到GridView的Item里。
『陸』 Android將倒計時做到極致
在開發倒計時功能時往往我們會為了方便直接使用CountDownTimer或者使用Handler做延時來實現,當然CountDownTimer內部封裝也是使用的Handler。
如果只是做次數很少的倒計時或者不需要精確的倒計時邏輯那倒沒關系,比如說我只要倒計時10秒,或者我大概5分鍾請求某個介面
但是如果是需要做精確的倒計時操作,比如說手機發送驗證碼60秒,那使用現有的倒計時方案就會存在問題。可能有些朋友沒有注意到這一點,下面我們就來簡單分析一下現有倒計時的問題。
這個可能是用得最多的,因為方便嘛。但其實倒計時每一輪倒計時完之後都是存在誤差的,如果看過CountDownTimer的源碼你就會知道,他的內部是有做 校準操作 的。(源碼很簡單這里就不分析了)
但是如果你認真的測試過CountDownTimer,你就會發現,即便它內部有做校準操作,他的沒一輪都是有偏差,只是他最後一次倒計時完之後的總共時間和開始倒計時的時間相比沒偏差。
什麼意思呢,意思就是1秒,2.050秒,3.1秒......,這樣的每輪偏差,導致他會出現10.95秒,下一次12秒的情況,那它的回調中如果你直接做取整就會出現少一秒的情況,但實際是沒少的。
這只是其中的一個問題,你可以不根據它的回調做展示,自己用一個整形累加做展示也能解決。但是他還有個問題,有概率直接出現跳秒,就是比如3秒,下次直接5秒,這是實際的跳秒,是少了一次回調的那種。
跳秒導致你如果直接使用它可能會大問題,你可能自測的時候沒發現,到時一上線應用在用戶那概率跳秒,那就蛋疼了。
不搞這么多花里胡哨的,直接使用Handler來實現,會有什麼問題。
因為直接使用handler來實現,沒有校準操作,每次循環會出現幾毫秒的誤差,雖然比CountDownTimer的十幾毫秒的誤差要好, 但是在基數大的倒計時情況下誤差會累計,導致最終結果和現實時間差幾秒誤差,時間越久,誤差越大
直接使用Timer也一樣,只不過他每輪的誤差更小,幾輪才有1毫秒的誤差,但是沒有校準還是會出現誤差累計,時間越久誤差越大。
既然無法直接使用原生的,那我們就自己做一個。
我們基於Handler進行封裝,從上面可以看出主要為了解決兩個問題,時間校準和跳秒。自己寫一個CountDownTimer
思路就是在倒計時開始前獲取一次SystemClock.elapsedRealtime(),沒輪倒計時再獲取一次SystemClock.elapsedRealtime()相減得到誤差,根據delay校準。然後使用while循壞來處理跳秒的操作,與原生的CountDownTimer不同,這里如果跳了多少秒,就會返回多少次回調。