我一直在尝试为Android编写一个简单的数字时钟应用程序.首先,我使用内置的数字时钟,并试图省略秒显示,但我不能.我希望时钟的秒数可以触发我的一些代码行.
然后我开始开发简单的应用程序将Digits放在屏幕上,但我不知道如何以最有效的方式触发显示.任何人都可以给我一个简单的开始,在哪里看和使用什么功能?如何在每秒内执行几行代码?我尝试了在Android应用程序中显示当前时间和日期的示例但是没有成功.没有名为CountDownRunner的库可以导入.
我是Android开发的新手,但我在Java,C,C++方面有相当不错的经验.
谢谢
这是一个简单的时钟,我使用android原生DigitalClock.java和AnalogClock.Java类中使用的方法开发.此时钟支持每秒或每分钟触发的事件,因此您可以使用这些事件并运行代码.
- StartTickPerSecond()方法使用DigitalClock.java中使用的方法来获取每秒的滴答.
- StartTickPerMinute()方法使用AnalogClock.java中使用的方法来获取每分钟的滴答
这仍然可能需要一些修改.. 但希望这将是你开始的东西..
Clock.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);
}
}
Run Code Online (Sandbox Code Playgroud)
OnClockTickListner.java
public interface OnClockTickListner {
public void OnSecondTick(Time currentTime);
public void OnMinuteTick(Time currentTime);
}
Run Code Online (Sandbox Code Playgroud)
如何使用
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());
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23830 次 |
| 最近记录: |