سؤال

أرغب في إنشاء توقيت ثاني متزايد مثل ساعة توقيت.

لذلك أريد أن أكون قادرًا على عرض الثواني والدقائق المتزايدة في التنسيق 00:01 ...

تجلب Google أمثلة على مدار 24 ساعة فقط ، كنت أتساءل هل يمكن لأي شخص أن يبدأني بمثال أو تعليمي لما أريد القيام به؟

تعديل:

إليك ما أستخدمه في Android حتى الآن

في onCreate ()

    secondsT = 0;
    elapsedTimeBeforePause = 0;

    stopWatch.start();
    startTime = SystemClock.elapsedRealtime();
    stopWatch.setBase(elapsedTimeBeforePause);

     stopWatch.setOnChronometerTickListener(new OnChronometerTickListener(){
            @Override
            public void onChronometerTick(Chronometer arg0) {
                //countUp is a long declared earlier
                secondsT = (SystemClock.elapsedRealtime() - arg0.getBase()) / 1000;
                String asText = (secondsT / 60) + ":" + (secondsT % 60); 
                //textGoesHere is a TextView
                ((TextView)findViewById(R.id.time)).setText(asText);
            }
     });

في Ondestroy ()

@Override
public void onDestroy() {

    inCall = false;
    elapsedTimeBeforePause = SystemClock.elapsedRealtime() - stopWatch.getBase();

    super.onDestroy();
}

يتجمع ما ورد أعلاه ويدير لكن TextView لا يزيد أبدًا ، فهي تظل دائمًا عند 0 ، هل يمكن لأي شخص أن يرى لماذا؟

هل كانت مفيدة؟

المحلول

أفترض أنك لست على دراية بنظام Android Chronometer - لديها بالفعل وظيفة ساعة توقيت أساسية. تحتاج إلى العمل مع خصوصياتها قليلاً ، لكن ليس من الصعب أن تفعل ما تريد بمجرد أن تفهم كيف يعمل.

هناك بعض الطرق التي يتم بها حساب الوقت على الهاتف ، لكنهما رئيسيان هما:

  1. "الوقت الفعلي" ، مثل الآن وفقًا لساعة الكمبيوتر الخاصة بي ، الساعة 11:23 صباحًا في إنجلترا. ومع ذلك ، يمكن أن يتغير هذا إذا اتصل جهاز الكمبيوتر الخاص بي خادمًا زمنيًا وقيل له إن لديه وقت خاطئ ، أو إذا كنت مسافرًا مع جهاز كمبيوتر محمول وعبرت حدود المنطقة الزمنية. باستخدام هذا من شأنه أن يعزز الفوضى مع ساعة التوقيت الخاصة بك حيث يمكن أن يتغير الوقت المقاس في أي وقت.

  2. "الوقت المنقضي منذ التمهيد" ، وهو عدد المللي ثانية منذ تشغيل الهاتف. هذا الرقم لا يرتبط بأي علاقة بالوقت الحقيقي ، لكنه سيتصرف بطريقة يمكن التنبؤ بها تمامًا. هذا هو ما يستخدمه Android Chrononmeter.

ال Chronometer هو في الأساس جهاز توقيت "عد" ، يقارن التيار SystemClock.elapsedRealtime() ضد ElapsedRealTime () الذي تم تعيينه في الوقت المناسب. الفرق بين الاثنين ، مقسوما على 1000 ، هو عدد الثواني منذ بدء المؤقت. ومع ذلك ، إذا أوقفت المؤقت ثم ابدأته مرة أخرى ، فستحصل على نتيجة غير بديهية - سيظهر المؤقت الوقت المنقضي كما لو أنه لم يتوقف أبدًا. هذا لأنك تحتاج إلى ضبط وقت الأساس الخاص بها لاتخاذ في الاعتبار الوقت الذي تم إيقافه. هذا بسيط للقيام به:

// When you're stopping the stopwatch, use this
// This is the number of milliseconds the timer was running for
elapsedTimeBeforePause = SystemClock.elapsedRealtime() - timer.getBase();

// When you're starting it again:
timer.setBase(SystemClock.elapsedRealtime() - elapsedTimeBeforePause);

تحرير: هنا هو الرمز الكامل لساعة توقيت أساسية ، والتي تعرض وقتك في TextView بدلاً من عنصر واجهة المستخدم Chronometer المعلنة في ملف XML الخاص بك.

public class TestProject extends Activity {
    TextView textGoesHere;
    long startTime;
    long countUp;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Chronometer stopWatch = (Chronometer) findViewById(R.id.chrono);
        startTime = SystemClock.elapsedRealtime();

        textGoesHere = (TextView) findViewById(R.id.textGoesHere);
        stopWatch.setOnChronometerTickListener(new OnChronometerTickListener(){
            @Override
            public void onChronometerTick(Chronometer arg0) {
                countUp = (SystemClock.elapsedRealtime() - arg0.getBase()) / 1000;
                String asText = (countUp / 60) + ":" + (countUp % 60); 
                textGoesHere.setText(asText);
            }
        });
        stopWatch.start();
    }
}

في Main.xml الخاص بك ، تحتاج إلى الحصول على هذا

<Chronometer android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/chrono"
    android:visibility="gone"/>

لا شك أن هناك طريقة لجعل الكرونومتر يعمل دون إعلانه في ملف XML ، ولكن المُنشئ Chronometer stopwatch = new Chronometer(this); لم يعمل بشكل صحيح.

يعرض الرمز أعلاه الوقت المنقضي بطريقة أساسية للغاية. على سبيل المثال ، إذا مرت 5 ثوانٍ فقط ، فسيظهر ذلك 0:5 بدلا من 0:05 ربما تريد. إصلاح هذا ليس من الصعب القيام به ، لكنني سأترك ذلك لك لم تقدمك! قون

نصائح أخرى

ماذا عن هذه ساعة رقمية.

لكن في الأساس يجب أن تكون قادرًا على العثور على العديد من تطبيقات Java عن طريق Googling للكلمات الرئيسية مثل Java و Stoplovatch و Digital Clock و ...

يمكنك إلقاء نظرة على APPLET APPLET وتعديل حسب الحاجة (عفوًا لا يوجد مصدر مع هذا واحد)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top