Android TextView Timer

hlasů
17

Pro mé aplikace pro Android je časovač, který měří, kolik času uplynulo. Ever 100 milisekund mohu aktualizovat TextView s nějakým textem, jako je „skóre: 10 Čas: 100,10 sekundy“. Ale najdu TextView aktualizuje pouze první několikrát. Aplikace je stále velmi citlivý, ale na štítku se neaktualizuje. Zkoušel jsem volat .invalidate (), ale to ještě nefunguje. Já nevím, jestli existuje nějaký způsob, jak opravit, nebo lepší widgetu používat.

Zde je příklad můj kód:

float seconds;
java.util.Timer gametimer;
void updatecount() { TextView t = (TextView)findViewById(R.id.topscore);
t.setText(Score: 10 - Time: +seconds+ seconds);
t.postInvalidate();
}
public void onCreate(Bundle sis) {
... Load the UI, etc...
  gametimer.schedule(new TimerTask() { public void run() {
     seconds+=0.1; updatecount();
} }, 100, 100);
}
Položena 07/02/2009 v 01:35
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
18

Obecné řešení je použití android.os.Handler místo, které běží v uživatelském rozhraní závitu. To dělá jen jednorázové zpětná volání, takže budete muset znovu spustit pokaždé, když vaše zpětné volání se nazývá. Ale je to dost snadné. Blogu na toto téma bylo napsáno před pár lety:

http://android-developers.blogspot.com/2007/11/stitch-in-time.html

Odpovězeno 26/11/2009 v 17:58
zdroj uživatelem

hlasů
2

To, co jsem si, že se děje, je že jste pádu z UI vlákno. Tam je jediný „looper“ vlákno, které zpracovává všechny aktualizace obrazovky. Pokusíte-li se volat „znehodnotit ()“ a nejste na toto vlákno se nic nestane.

Zkuste použít „postInvalidate ()“ na vašem pohledu místo. Bude vám umožní aktualizovat zobrazení, když nejste v současné UI závitu.

Více info zde

Odpovězeno 07/02/2009 v 04:30
zdroj uživatelem

hlasů
0

Je tu ještě jeden způsob, jak změnit text, každou sekundu; to je ValueAnimator. Tady je moje řešení:

  long startTime = System.currentTimeMillis();
  ValueAnimator animator = new ValueAnimator();
            animator.setObjectValues(0, 1000);
            animator.setDuration(1000);
            animator.setRepeatCount(ValueAnimator.INFINITE);
            animator.addListener(new AnimatorListenerAdapter() {

                @Override
                public void onAnimationStart(Animator animation) {
                    long currentTime = System.currentTimeMillis();
                    String text = TimeFormatUtils.formatTime(startTime - currentTime);
                   yourTextView.setText(text);
                }

                @Override
                public void onAnimationRepeat(Animator animation) {
                    long currentTime = System.currentTimeMillis();
                    String text = TimeFormatUtils.formatTime(startTime - currentTime);
                    yourTextView.setText(text);
                }
            });
            animator.start();
Odpovězeno 14/11/2016 v 12:45
zdroj uživatelem

hlasů
0

Použijte Pod kódem nastavit správný čas na TextView

public class MyCountDownTimer extends CountDownTimer {
        public MyCountDownTimer(long startTime, long interval) {
            super(startTime, interval);
        }

        @Override
        public void onFinish() {

            ExamActivity.this.submitresult();
        }

        @Override
        public void onTick(long millisUntilFinished) {

            long millis = millisUntilFinished;

            int seconds = (int) (millis / 1000) % 60;
            int minutes = (int) ((millis / (1000 * 60)) % 60);
            int hours = (int) ((millis / (1000 * 60`enter code here` * 60)) % 24);

            String ms = String
                    .format("%02d:%02d:%02d", hours, minutes, seconds);
            txtimedisplay.setText(ms);
        }
    }
Odpovězeno 19/12/2014 v 14:00
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more