Autore Topic: View Chronometer  (Letto 993 volte)

Offline qualcuno

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Google+
    • Mostra profilo
    • Ingegnere Informatico Blog
View Chronometer
« il: 04 Novembre 2011, 17:44:01 CET »
0
salve a tutti
sto scoprendo da poco il mondo android e ho provato a realizzare un piccolo cronometro sfruttando il componente Chronometer.
Per questo ho posizionato due pulsanti (AVVIA e STOP)
con i loro intuibili compiti

Ho però un problema, quando clicco su Avvia il timer si avvia regolarmente partendo da 0, poi quando clicco su STOP si ferma regolarmente al valore indicato, quando poi riclicco su AVVIA il timer salta ed è come se questo non si fermasse e continuasse anche dopo aver cliccato stop

questo è il codice:

Codice: [Seleziona]

package hello.android;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.TextView;

public class HelloActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView startView= (TextView) findViewById(R.id.button_start);
        TextView stopView= (TextView) findViewById(R.id.button_stop);
        startView.setOnClickListener(new OnClickListener(){
                final  Chronometer chrono= (Chronometer)findViewById(R.id.chronometer1);
                        public void onClick(View v) {
                                // TODO Auto-generated method stub
                                 chrono.start();
                        }
               
        });
       
        stopView.setOnClickListener(new OnClickListener(){
              final  Chronometer chrono= (Chronometer)findViewById(R.id.chronometer1);
                        public void onClick(View v) {
                                // TODO Auto-generated method stub
                                 chrono.stop();
                        }
             
      });
       
 }
}


dove sbaglio???

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:View Chronometer
« Risposta #1 il: 04 Novembre 2011, 20:54:15 CET »
0
Non sbagli. Questo é il comportamento di default.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline qualcuno

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Google+
    • Mostra profilo
    • Ingegnere Informatico Blog
Re:View Chronometer
« Risposta #2 il: 04 Novembre 2011, 22:54:48 CET »
0
Non sbagli. Questo é il comportamento di default.


scusami se questo è il comportamento di default che senso ha lo 'stop()' ? se in realtà chiamando il metodo il timer va avanti in background...

non c'è un modo per riprendere il timer dal valore in cui si stoppa?
« Ultima modifica: 04 Novembre 2011, 23:17:31 CET da qualcuno »

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:View Chronometer
« Risposta #3 il: 04 Novembre 2011, 23:31:26 CET »
0
Citazione da: Chronometer | Android Developers
Stop counting up. This does not affect the base as set from setBase(long), just the view display. This stops the messages to the handler, effectively releasing resources that would be held as the chronometer is running, via start().

Il metodo stop() non ha effetto sulla "base-tempo" ma solo sulla visualizzazione della TextView. Sta a te implementare un cronometro "reale" andando a ricavare il tempo trascorso e facendo ripartire il cronometro da quel tempo.

Offline qualcuno

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Google+
    • Mostra profilo
    • Ingegnere Informatico Blog
Re:View Chronometer
« Risposta #4 il: 05 Novembre 2011, 22:46:18 CET »
0
sono riuscito a realizzare un piccolo cronometro come mia prima applicazione, ho ben capito che la base dei tempi e la textview
sono indipendenti tra loro ma non ho ancora capito bene come funziona la SetBase

posto qui il codice del mio cronometro perfettamente funzionante
che si basa su questo ragionamento:

Quando clicco su START recupero ciò che è visualizzato dalla textView (nel caso iniziale 00:00 in altri casi il valore dello STOP)
poi trasformo il tempo visualizzato in millisecondi e poi eseguo questa istruzione:

  chrono.setBase(SystemClock.elapsedRealtime() - stoppedMilliseconds);

cioè risetto la base dei tempi sottraendo al tempo trascorso i millisecondi visualizzati quando premo su stop

la cosa non mi è chiara : xke dovrei fare la sottrazione?

la cosa che mi viene da pensare è fare la SOMMA tant'è che eseguendo l'istruzione chrono.setBase(SystemClock.elapsedRealtime()) il
cronometro si azzera.

Come funziona quindi questo elapsedRealtime()? cosa mi restituisce?

Codice (Java): [Seleziona]
package hello.android;

import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.TextView;

public class HelloActivity extends Activity {
    /** Called when the activity is first created. */
        Chronometer  chrono;
        String te;
        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        chrono= (Chronometer)this.findViewById(R.id.chronometer1);
        TextView startView= (TextView) findViewById(R.id.button_start);
        TextView stopView= (TextView) findViewById(R.id.button_stop);
        TextView resetView= (TextView) findViewById(R.id.button_reset);
        startView.setOnClickListener(mStartListener);
        stopView.setOnClickListener(mStopListener);
        resetView.setOnClickListener(mResetListener);
}
    View.OnClickListener mStartListener = new OnClickListener() {
        public void onClick(View v) {
                      te = chrono.getText().toString();
                  int stoppedMilliseconds = 0;
                  String array[] = te.split(":");
                  if (array.length == 2) {
                    stoppedMilliseconds = Integer.parseInt(array[0]) * 60 * 1000
                        + Integer.parseInt(array[1]) * 1000;
                  }
                  chrono.setBase(SystemClock.elapsedRealtime() - stoppedMilliseconds);
                          chrono.start();
        }
    };
    View.OnClickListener mStopListener = new OnClickListener() {
        public void onClick(View v) {
            chrono.stop();
      }
    };
    View.OnClickListener mResetListener = new OnClickListener() {
        public void onClick(View v) {
            chrono.setBase(SystemClock.elapsedRealtime());
      }
    };
}

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:View Chronometer
« Risposta #5 il: 06 Novembre 2011, 13:14:26 CET »
0
Citazione da: elapsedRealtime ()
Returns milliseconds since boot, including time spent in sleep.

Citazione da: Chronometer.setBase (long base)
Set the time that the count-up timer is in reference to.

Dai un'occhiata anche a questo tipo di implementazione : Learn Android: Android Chronometer Timer

Offline AntonioE.

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Microsoft Windows 7 x64
Re:View Chronometer
« Risposta #6 il: 16 Maggio 2013, 14:25:57 CEST »
0
Returns milliseconds since boot, including time spent in sleep.

"since boot" si intende il boot del device? quindi detto terra terra il tempo passato dall'ultima volta che abbiamo spento / riacceso il telefono?
Non c'è cattivo più cattivo di un buono che diventa cattivo