Ⅰ android 計時器
這個是AndroidStudio自帶的TimePickerDialog
Ⅱ android中怎麼使timecount自動開始計時
android計時器,時間計算器的實現方法,需要的朋友可以參考一下
需求:默認為"00:00:00",點擊開始按鈕時清零後開始計時,出現如10:28:34。點擊停止的時候停止計時。
問題:使用Calendar
DateFormat的方法,不設置時區獲取到的小時是本地時區的(東八區的就是8),設置成GMT標准時區獲取到的時間是12小時(12:00:00),設置24小時制無效。
在開始時間加減各種小時都無效,而且計時只能到12小時就自動跳上去了,始終無法出現默認狀態00:00:00開始計時的效果。
嘗試各種時間設置方法無效後只能自己寫一個根據秒數轉換時間格式字元串的方法了,經過測試是沒問題的,兩位數只能顯示99小時為最大,如需要更大小時數需要改改方法。
另外小時數也不能無限大,超過long數據類型長度會變成負數的,會出現異常的。
顯示效果:
測試類:
復制代碼
代碼如下:
public class TestTime {
public
static void main(String[] args) {
TestTime tt = new
TestTime();
tt.showTimeCount(99*3600000+75*1000);
}
//時間計數器,最多隻能到99小時,如需要更大小時數需要改改方法
public String
showTimeCount(long time) {
System.out.println("time="+time);
if(time >=
360000000){
return "00:00:00";
}
String
timeCount = "";
long hourc = time/3600000;
String hour =
"0" + hourc;
System.out.println("hour="+hour);
hour =
hour.substring(hour.length()-2, hour.length());
System.out.println("hour2="+hour);
long minuec =
(time-hourc*3600000)/(60000);
String minue = "0" +
minuec;
System.out.println("minue="+minue);
minue =
minue.substring(minue.length()-2, minue.length());
System.out.println("minue2="+minue);
long secc =
(time-hourc*3600000-minuec*60000)/1000;
String sec = "0" +
secc;
System.out.println("sec="+sec);
sec =
sec.substring(sec.length()-2, sec.length());
System.out.println("sec2="+sec);
timeCount = hour + ":" + minue +
":" + sec;
System.out.println("timeCount="+timeCount);
return timeCount;
}
}
實際例子:
復制代碼
代碼如下:
//時間計數器,最多隻能到99小時,如需要更大小時數需要改改方法
public String showTimeCount(long time) {
if(time >=
360000000){
return "00:00:00";
}
String
timeCount = "";
long hourc = time/3600000;
String hour =
"0" + hourc;
hour = hour.substring(hour.length()-2,
hour.length());
long minuec =
(time-hourc*3600000)/(60000);
String minue = "0" +
minuec;
minue = minue.substring(minue.length()-2,
minue.length());
long secc =
(time-hourc*3600000-minuec*60000)/1000;
String sec = "0" +
secc;
sec = sec.substring(sec.length()-2, sec.length());
timeCount = hour + ":" + minue + ":" + sec;
return
timeCount;
}
private Handler stepTimeHandler;
private Runnable mTicker;
long startTime = 0;
//開始按鈕
class startBtnListener implements OnClickListener {
@Override
public void onClick(View v) {
Button b =
(Button)v;
String buttonText =
b.getText().toString();
if("Start".equalsIgnoreCase(buttonText)){
b.setText("Stop");
// 清零 開始計時
stepTimeTV.setText("00:00:00");
stepTimeHandler = new
Handler();
startTime =
System.currentTimeMillis();
mTicker = new Runnable()
{
public void run() {
String
content = showTimeCount(System.currentTimeMillis() -
startTime);
stepTimeTV.setText(content);
long now =
SystemClock.uptimeMillis();
long next = now + (1000
- now % 1000);
stepTimeHandler.postAtTime(mTicker,
next);
}
};
//啟動計時線程,定時更新
mTicker.run();
}else{
b.setText("Start");
//停止計時 Remove
any pending posts of Runnable r that are in the message
queue.
stepTimeHandler.removeCallbacks(mTicker);
}
}
}
用時間格式化的方式測試代碼:
復制代碼
代碼如下:
//開始按鈕 通過Calendar時間設置的方式,無法正常顯示小時為0
class startBtnListener implements OnClickListener {
@Override
public void onClick(View v) {
Button b =
(Button)v;
String buttonText =
b.getText().toString();
if("Start".equalsIgnoreCase(buttonText)){
b.setText("Stop");
// 清零 開始計時
stepTimeTV.setText("00:00:00");
if (mCalendar == null)
{
mCalendar =
Calendar.getInstance();
TimeZone tz =
TimeZone.getTimeZone("GMT");//GMT+8
mCalendar.setTimeZone(tz);
mCalendar.get(Calendar.HOUR_OF_DAY);//24小時制
}
stepTimeHandler = new Handler();
//System.uptimeMillis()
//記錄從機器啟動後到現在的毫秒數,當系統進入深度睡眠時,此計時器將會停止
//System.currentTimeMillis()
//返回自1970年1月1日到現在的毫秒數,通常用來設置日期和時間
//System.elapsedRealtime()
//返回從機器啟動後到現在的毫秒數,包括系統深度睡眠的時間,api里沒有這個方法
//直接取得的是當地時區時間,當地時間跟時區有關,設置GMT後始終多12小時
startTime =
System.currentTimeMillis();//12*3600000 - 36*3600000減掉或者加上12小時都不行
mTicker = new Runnable() {
public
void run() {
//這個減出來的日期是1970年的 時間格式不能出現00:00:00
12:00:00
long showTime = System.currentTimeMillis()
- startTime;
Log.i(TAG,showTime+"");
mCalendar.setTimeInMillis(showTime + 13*3600000 +
1000);
String content = (String)
DateFormat.format(mFormat, mCalendar);
stepTimeTV.setText(content);
long now =
SystemClock.uptimeMillis();
long next = now + (1000
- now % 1000);
stepTimeHandler.postAtTime(mTicker,
next);
}
};
//啟動計時線程,定時更新
mTicker.run();
}else{
b.setText("Start");
//停止計時 Remove
any pending posts of Runnable r that are in the message
queue.
stepTimeHandler.removeCallbacks(mTicker);
}
}
}
private Handler stepTimeHandler;
Calendar
mCalendar;
String mFormat = "yyyy-MM-dd hh:mm:ss";//yyyy-MM-dd
long startTime = 0;
private Runnable mTicker;
Ⅲ android中怎麼實現倒計時怎麼按照小時分鍾
Android實現計時與倒計時的五種方法:
方法一
Handler與Message(不用TimerTask)
public class timerTask extends Activity{
private int recLen = 11;
private TextView txtView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.timertask);
txtView = (TextView)findViewById(R.id.txttime);
Message message = handler.obtainMessage(1); // Message
handler.sendMessageDelayed(message, 1000);
}
final Handler handler = new Handler(){
public void handleMessage(Message msg){ // handle message
switch (msg.what) {
case 1:
recLen--;
txtView.setText("" + recLen);
if(recLen > 0){
Message message = handler.obtainMessage(1);
handler.sendMessageDelayed(message, 1000); // send message
}else{
txtView.setVisibility(View.GONE);
}
}
super.handleMessage(msg);
}
};
}
linux
方法二
Handler與Thread(不佔用UI線程)
public class timerTask extends Activity{
private int recLen = 0;
private TextView txtView;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.timertask);
txtView = (TextView)findViewById(R.id.txttime);
new Thread(new MyThread()).start(); // start thread
}
final Handler handler = new Handler(){ // handle
public void handleMessage(Message msg){
switch (msg.what) {
case 1:
recLen++;
txtView.setText("" + recLen);
}
super.handleMessage(msg);
}
};
public class MyThread implements Runnable{ // thread
@Override
public void run(){
while(true){
try{
Thread.sleep(1000); // sleep 1000ms
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}catch (Exception e) {
}
}
}
}
}
方法三
Timer與TimerTask(java實現)
public class timerTask extends Activity{
private int recLen = 11;
private TextView txtView;
Timer timer = new Timer();
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.timertask);
txtView = (TextView)findViewById(R.id.txttime);
timer.schele(task, 1000, 1000); // timeTask
}
TimerTask task = new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() { // UI thread
@Override
public void run() {
recLen--;
txtView.setText(""+recLen);
if(recLen < 0){
timer.cancel();
txtView.setVisibility(View.GONE);
}
}
});
}
};
}
方法四
TimerTask與Handler(不用Timer的改進型)
public class timerTask extends Activity{
private int recLen = 11;
private TextView txtView;
Timer timer = new Timer();
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.timertask);
txtView = (TextView)findViewById(R.id.txttime);
timer.schele(task, 1000, 1000); // timeTask
}
final Handler handler = new Handler(){
@Override
public void handleMessage(Message msg){
switch (msg.what) {
case 1:
txtView.setText(""+recLen);
if(recLen < 0){
timer.cancel();
txtView.setVisibility(View.GONE);
}
}
}
};
TimerTask task = new TimerTask() {
@Override
public void run() {
recLen--;
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
};
}
方法五
Handler與Runnable(最簡單型)
public class timerTask extends Activity{
private int recLen = 0;
private TextView txtView;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.timertask);
txtView = (TextView)findViewById(R.id.txttime);
handler.postDelayed(runnable, 1000);
}
Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
recLen++;
txtView.setText("" + recLen);
handler.postDelayed(this, 1000);
}
};
}
計時與倒計時
方法1,方法2和方法3,都是倒計時
方法4,方法5,都是計時
計時和倒計時,都可使用上述方法實現(代碼稍加改動)
UI線程比較
方法1,方法2和方法3,都是在UI線程實現的計時;
方法4和方法5,是另開Runnable線程實現計時
實現方式比較
方法1,採用的是Java實現,即Timer和TimerTask方式;
其它四種方法,都採用了Handler消息處理
推薦使用
如果對UI線程交互要求不很高,可以選擇方法2和方法3
如果考慮到UI線程阻塞,嚴重影響到用戶體驗,推薦使用方法4,另起線程單獨用於計時和其它的邏輯處理
方法5,綜合了前幾種方法的優點,是最簡的
Ⅳ android 計時器代碼
Timer mTimer = new Timer();
mTask = new TimerTask(){
public void run(){
//execute the task
Message message = new Message();
message.what = DIALOG_HIDE;
//Log.e(TAG, "message.what = DIALOG_HIDE");
mHandler.sendMessage(message);
}
};
mTimer.schele(mTask, 5000);
在主線程里開啟timer,等於啟動了另一個線程,線程之間的通信是要用handler發送message,然後在主線程里用handler.handleMessage()裡面接收並處理。
Ⅳ android studio怎麼實現倒計時
以自動實現KeyEvent.Callback介面為例子啟動AndroidStudio,打開demo工程增加實現KeyEvent.Callback的類使用Alt+Enter快捷鍵把游標定位到介面名按Alt+Enter,並點擊"Implementmethods"菜單項在彈出的「SelectMethodstoImplement」對話框中,點擊OK按鈕這樣就可以實現所有的介面函數了。使用菜單實現介面方法把游標定位到介面名,執行菜單「Code」-「ImplementMethods」在彈出的「SelectMethodstoImplement」對話框中,點擊OK按鈕這樣就可以實現所有的介面函數了
Ⅵ 怎麼在android里顯示一個計時器
public
boolean
ontouch(view
arg0,
motionevent
arg1)
{
if(flag){
flag
=
false;
timer,cancel();
simpledateformat
b
=
new
simpledateformat("hh:mm:ss");
date
currenttime
=
new
date();
string
s2
=
b.format(currenttime);
cantime1.setstatus(s2);//顯示當前時間
}else{
flag
=
true;
}
return
flag;
}
好像不對,總之你要暫停的時候就用timer.cancel();只要miss在就能記住之前的狀態了,計時器再開的時候再settimertask
Ⅶ 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 裡面的計時器
沒明白你到底想問的是什麼?
5秒間隔本身是ANdroid定義的系統不相應時間
Ⅹ android 怎麼實現計時器時分秒的操作
可以Calendar.getInstance().get(Calendar.HOUR),獲取當前時間,然後計算時間差