2

特定の日付までカウントダウンするカウントダウンがありました。ティック(間隔1秒)ごとに、イベントまでの残りの日数/時間/分でテキストボックスが更新されます。私の問題は、分(まだ日/時間についてはわかりません)がちらつき続けることです。つまり、1分間に18、17、18、17の順になり、16、17、16の順になり、そのようになります。

ちらつきの問題は解決しましたが、現在は機能していないタイムゾーンだけです。(フリッカーはPshemoのコードを使用して解決されました)

また、TimeZoneが機能していないようです。それは2時間から多くを示しています。SimpleTimeZoneを使用して変更しようとしましたが、機能せず、+ 2時間が表示されます(SimpleTimeZoneの設定に関係なく)

原因は何でしょうか?

カウントダウンコード:

         new CountDownTimer(remaining, 1000) {
         TextView tv = (TextView)getActivity().findViewById(R.id.introTimeLeft);
         public void onTick(long millisUntilFinished) {         
             SimpleTimeZone ts = new SimpleTimeZone(2, "Middle Europe");

             Calendar cal = Calendar.getInstance(ts);
             cal.set(2012, 5, 28, 17, 0);
             long endTime = cal.getTimeInMillis(); 
             long currentTime = System.currentTimeMillis();
             long remaining = endTime - currentTime;

         tv.setText(getDurationBreakdown(remaining));
         }

         ...

      }.start();

public String getDurationBreakdown(long millis)
{
    if(millis < 0)
    {
        throw new IllegalArgumentException("Duration must be greater than zero!");
    }

    long days = TimeUnit.MILLISECONDS.toDays(millis);
    millis -= TimeUnit.DAYS.toMillis(days);

    long hours = TimeUnit.MILLISECONDS.toHours(millis);
    millis -= TimeUnit.HOURS.toMillis(hours);

    long minutes = (long) Math.ceil(TimeUnit.MILLISECONDS.toMinutes(millis));

    StringBuilder sb = new StringBuilder(64);
    sb.append(days);
    sb.append(" Days ");
    sb.append(hours);
    sb.append(" Hours ");
    sb.append(minutes);
    sb.append(" Minutes");

    return(sb.toString());
}
4

2 に答える 2

2

それはただの野蛮な推測ですが、それを試すことに魅力はありません。

私が見たものから、あなたは同じ場所で currentTime読んだ。endTime

long endTime = cal.getTimeInMillis(); 
long currentTime = System.currentTimeMillis();

また、カレンダーオブジェクトでミリ秒を指定しないためcal.getTimeInMillis()、現在のミリ秒を使用しています。だからあなたのコード

long remaining = endTime - currentTime;

のような値に等しい場合もありますが、のような値に等しい場合183360000もあります(作成と182999999の間に経過したミリ秒数によって異なります)。endTimecurrentTime

これにより、1ミリ秒の誤算が発生する可能性がありますが、丸め後は1秒/分/時間/日になる可能性もあります(この値が次のミリ秒で変化する場合)。

一度だけ読んendTimeで、計算中にcurrentTimeだけを更新することで解決できますremaining

于 2012-06-26T14:15:51.813 に答える
0

2つの異なる場所からテキストビューを更新している可能性があります。TextViewを更新している別のクラスはありますか?

于 2012-06-26T14:26:51.677 に答える