簡體   English   中英

如何在 Android 上創建數字時鍾?

[英]How to create a Digital Clock on Android?

我一直在嘗試為 Android 編寫一個簡單的數字時鍾應用程序。 首先,我使用內置的數字時鍾並嘗試省略秒顯示,但我做不到。 我想要時鍾的秒數來觸發我擁有的一些代碼行。

然后我開始開發簡單的應用程序將數字放在屏幕上,但我不知道如何以最有效的方式觸發顯示。 任何人都可以給我一個簡單的開始,在哪里看和使用什么功能? 如何在每秒內執行幾行代碼? 我嘗試了在 Android 應用程序中顯示當前時間和日期的示例,但沒有成功。 沒有要導入的名為 CountDownRunner 的庫。

我是 android 開發的新手,但是我在 Java、C、ZF6F87C9FDCF8B3C3C2F077 方面有相當不錯的經驗

謝謝

這是我使用 android 本機 DigitalClock.java 和 AnalogClock.Java 類中使用的方法開發的一個簡單時鍾。 此時鍾支持每秒或每分鍾觸發的事件,因此您可以使用這些事件並運行您的代碼。

  1. StartTickPerSecond() 方法使用 DigitalClock.java 中使用的方法來獲取每秒的滴答聲。
  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM