Temporizador de TextView de Android
Para mi aplicación de Android hay un temporizador que mide cuánto tiempo ha pasado. Cada 100 milisegundos actualizo mi TextView con algún texto como "Score: 10 Time: 100.10 seconds". Pero, creo que TextView sólo se actualiza las primeras veces. La aplicación sigue siendo muy sensible, pero la etiqueta no se actualizará. Intenté llamar a .invalidate (), pero todavía no funciona. No sé si hay alguna manera de arreglar esto, o un widget mejor para usar.
He aquí un ejemplo de mi código:
- Prensa larga sobre el texto seleccionado en textview en android
- Nuevo Texto Seleccionable en el componente android 3 (API <= 11)
- Inserción de una vista de texto en medio de una vista de imagen de Android
- Agregar una fuente personalizada para la aplicación completa de Android
- Expanda TextView con wrap_content hasta que la vista de vecino llegue al final del padre
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); }
- Android: conversión entre cadenas, SpannedStrings y Spannablestrings
- Destacando el color del texto usando Html.fromHtml () en Android?
- Android: Desplazamiento automático de texto en TextView
- ¿Cómo mostrar el archivo .rtf dentro de TextView?
- El valor de la vista de texto se restablece al cambiar el fragmento
- Cómo mostrar el valor de una variable en la pantalla
- Animación del tamaño de texto de TextView de Android y no de TextView
- Ajuste automático de TextView para Android
La solución general es usar android.os.Handler en su lugar que se ejecuta en el subproceso de interfaz de usuario. Sólo realiza devoluciones de un solo disparo, por lo que debe activarla de nuevo cada vez que se llame. Pero es bastante fácil de usar. Un blog en este tema fue escrito hace un par de años:
http://android-developers.blogspot.com/2007/11/stitch-in-time.html
Lo que creo que está sucediendo es que te estás cayendo del hilo de la interfaz de usuario. Hay un solo hilo "looper" que maneja todas las actualizaciones de la pantalla. Si intenta llamar a "invalidate ()" y no está en este hilo, nada pasará.
Intente usar "postInvalidate ()" en su vista. Le permitirá actualizar una vista cuando no esté en el subproceso de interfaz de usuario actual.
Más información aquí
Utilizar código inferior para establecer la hora en 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); } }
Hay una manera más de cambiar el texto cada segundo; Esto es ValueAnimator
. Aquí está mi solución:
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();
- Implementar pausa / reanudar en la descarga de archivos
- Adición de un botón de reproducción de terminación mediante Android L Notification.MediaStyle