![](/img/trans.png)
[英]Digital clock how to create a digital clock with custom images for hours android
[英]How to create a Digital Clock on Android?
我一直在嘗試為 Android 編寫一個簡單的數字時鍾應用程序。 首先,我使用內置的數字時鍾並嘗試省略秒顯示,但我做不到。 我想要時鍾的秒數來觸發我擁有的一些代碼行。
然后我開始開發簡單的應用程序將數字放在屏幕上,但我不知道如何以最有效的方式觸發顯示。 任何人都可以給我一個簡單的開始,在哪里看和使用什么功能? 如何在每秒內執行幾行代碼? 我嘗試了在 Android 應用程序中顯示當前時間和日期的示例,但沒有成功。 沒有要導入的名為 CountDownRunner 的庫。
我是 android 開發的新手,但是我在 Java、C、ZF6F87C9FDCF8B3C3C2F077 方面有相當不錯的經驗
謝謝
這是我使用 android 本機 DigitalClock.java 和 AnalogClock.Java 類中使用的方法開發的一個簡單時鍾。 此時鍾支持每秒或每分鍾觸發的事件,因此您可以使用這些事件並運行您的代碼。
- StartTickPerSecond() 方法使用 DigitalClock.java 中使用的方法來獲取每秒的滴答聲。
- StartTickPerMinute() 方法使用 AnalogClock.java 中使用的方法來獲取每分鍾的滴答聲
這仍然可能需要一些修改..但希望這將是你開始的東西..
時鍾.java
package com.sample.data;
import java.util.*;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Handler;
import android.os.SystemClock;
import android.text.format.Time;
public class Clock
{
public static final int TICKPERSECOND=0;
public static final int TICKPERMINUTE=1;
private Time Time;
private TimeZone TimeZone;
private Handler Handler;
private List<OnClockTickListner> OnClockTickListenerList = new ArrayList<OnClockTickListner>();
private Runnable Ticker;
private BroadcastReceiver IntentReceiver;
private IntentFilter IntentFilter;
private int TickMethod=0;
Context Context;
public Clock(Context context)
{
this(context, Clock.TICKPERMINUTE);
}
public Clock(Context context,int tickMethod)
{
this.Context=context;
this.TickMethod=tickMethod;
this.Time=new Time();
this.Time.setToNow();
switch (TickMethod)
{
case 0:
this.StartTickPerSecond();
break;
case 1:
this.StartTickPerMinute();
break;
default:
break;
}
}
private void Tick(long tickInMillis)
{
Clock.this.Time.set(Clock.this.Time.toMillis(true)+tickInMillis);
this.NotifyOnTickListners();
}
private void NotifyOnTickListners()
{
switch (TickMethod)
{
case 0:
for(OnClockTickListner listner:OnClockTickListenerList)
{
listner.OnSecondTick(Time);
}
break;
case 1:
for(OnClockTickListner listner:OnClockTickListenerList)
{
listner.OnMinuteTick(Time);
}
break;
}
}
private void StartTickPerSecond()
{
this.Handler=new Handler();
this.Ticker = new Runnable()
{
public void run()
{
Tick(1000);
long now = SystemClock.uptimeMillis();
long next = now + (1000 - now % 1000);
Handler.postAtTime(Ticker, next);
}
};
this.Ticker.run();
}
private void StartTickPerMinute()
{
this.IntentReceiver= new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
Tick(60000);
}
};
this.IntentFilter = new IntentFilter();
this.IntentFilter.addAction(Intent.ACTION_TIME_TICK);
this.Context.registerReceiver(this.IntentReceiver, this.IntentFilter, null, this.Handler);
}
public void StopTick()
{
if(this.IntentReceiver!=null)
{
this.Context.unregisterReceiver(this.IntentReceiver);
}
if(this.Handler!=null)
{
this.Handler.removeCallbacks(this.Ticker);
}
}
public Time GetCurrentTime()
{
return this.Time;
}
public void AddClockTickListner(OnClockTickListner listner)
{
this.OnClockTickListenerList.add(listner);
}
}
OnClockTickListner.java
public interface OnClockTickListner {
public void OnSecondTick(Time currentTime);
public void OnMinuteTick(Time currentTime);
}
如何使用
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.clock_list_item);
Clock c=new Clock(this);
c.AddClockTickListner(new OnClockTickListner() {
@Override
public void OnSecondTick(Time currentTime) {
Log.d("Tick Test per Second",DateFormat.format("h:mm:ss aa ", currentTime.toMillis(true)).toString());
}
@Override
public void OnMinuteTick(Time currentTime) {
Log.d("Tick Test per Minute",DateFormat.format("h:mm aa", currentTime.toMillis(true)).toString());
}
});
}
}
查看DigitalClock小部件的源代碼。 特別是,查看onAttachedToWindow()
方法,它創建了一個 Runnable 來處理 1 秒的“滴答聲”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.