JavascriptProva

mercoledì 27 luglio 2016

Sistemazione delle SeekBars per gli intervalli fra le segnalazioni.

Con qualche "colpo di copia-incolla" ho tolto il codice XML che rappresentava le SeekBars dall'attività principale e lo ho messe su una nuova attività chiamata TimeSettings.
Dato che le shapes sono già nella cartella drawables vengono recepite anche qui, e così le due bars mi vengono già ben formattate da un punto di vista estetico.

Ho impostato il massimo a 240 minuti (4 ore)
Ora, per rendere la scala graduata a 10 minuti, devo fare, come già fatto prima nell'altra mia prova, la divisione intera del valore della barra per 10, e poi moltiplicare per 10.
Ecco:
public class TimeSettings extends Activity {

 SeekBar seekBarMin, seekBarMax;
 TextView textViewMin,textViewMax;
 int intero;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_time_settings);
  seekBarMin=(SeekBar)findViewById(R.id.seekBar1);
  seekBarMax=(SeekBar)findViewById(R.id.seekBar2);
  textViewMin=(TextView)findViewById(R.id.textView1);
  textViewMax=(TextView)findViewById(R.id.textView2);
  
  seekBarMin.setMax(240);  //4 ore * 60 minuti
  seekBarMin.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
   
   @Override
   public void onStopTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub
    
   }
   
   @Override
   public void onStartTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub
    
   }
   
   @Override
   public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    intero=10*(progress/10);
    textViewMin.setText(""+intero);
    
   }
  });
 }


}
E funziona: sulla TextBarMin appaiono i minuti, in cambiamenti discreti di 10 minuti per volta.

Ora devo commutare in ore e minuti, tremite un altro calcolo matematico: divisione intera per 60 e modulo 60.
   @Override
   public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    intero=10*(progress/10);
    int ore=intero/60;
    int minuti=intero%60;
    textViewMin.setText(ore+" ORE : "+minuti+" MINUTI");
E verifichiamo...

Funziona.

Una finezza: se si tratta di 1 ora, appare scritto "ORA" e non "ORE". Più "umano" e attraente:
   @Override
   public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    intero=10*(progress/10);
    int ore=intero/60;
    int minuti=intero%60;
    String strOra="ORE";
    if(ore==1)strOra="ORA";
    textViewMin.setText(ore+" "+strOra+" E "+minuti+" MINUTI");
    
   }
Okay.


Ho sistemato le due SeekBars, con una serie di finezze che rendono il testo molto "human friendly":
  seekBarMin.setMax(240);  //4 ore * 60 minuti
  seekBarMin.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
   
   @Override
   public void onStopTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub
    
   }
   
   @Override
   public void onStartTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub
    
   }
   
   @Override
   public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    int intero=10*(progress/10);
    int ore=intero/60;
    int minuti=intero%60;
    
    String stringaDelleOre;
    String stringaDeiMinuti;
    String stringaEt="";
    
    if(ore==0){
     stringaDelleOre="";
    }
    else if(ore==1){
     stringaDelleOre=ore+" ORA "; 
    }
    else{
     stringaDelleOre=ore+" ORE ";     
    }    
    if(minuti==0){
     stringaDeiMinuti="";     
    }
    else if(minuti==1){
     stringaDeiMinuti=minuti+" MINUTO ";          
    }
    else{
     stringaDeiMinuti=minuti+" MINUTI ";
    }    
    if(ore!=0 && minuti!=0) stringaEt=" E ";
    if(ore==0 && minuti==0) {
     stringaDelleOre=ore+" ORE";
     stringaEt= " E ";
     stringaDeiMinuti=minuti+" MINUTI";
    }

    textViewMin.setText(stringaDelleOre+stringaEt+stringaDeiMinuti);
    
    if(progress>seekBarMax.getProgress())seekBarMax.setProgress(progress);
   }
  });
  
  seekBarMax.setMax(240);
  seekBarMax.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
   
   @Override
   public void onStopTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub
    
   }
   
   @Override
   public void onStartTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub
    
   }
   
   @Override
   public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    int intero=10*(progress/10);
    int ore=intero/60;
    int minuti=intero%60;
    
    String stringaDelleOre;
    String stringaDeiMinuti;
    String stringaEt="";
    
    if(ore==0){
     stringaDelleOre="";
    }
    else if(ore==1){
     stringaDelleOre=ore+" ORA "; 
    }
    else{
     stringaDelleOre=ore+" ORE ";     
    }    
    if(minuti==0){
     stringaDeiMinuti="";     
    }
    else if(minuti==1){
     stringaDeiMinuti=minuti+" MINUTO ";          
    }
    else{
     stringaDeiMinuti=minuti+" MINUTI ";
    }    
    if(ore!=0 && minuti!=0) stringaEt=" E ";
    if(ore==0 && minuti==0) {
     stringaDelleOre=ore+" ORE";
     stringaEt= " E ";
     stringaDeiMinuti=minuti+" MINUTI";
    }

    textViewMax.setText(stringaDelleOre+stringaEt+stringaDeiMinuti);
    if(progress<seekBarMin.getProgress())seekBarMin.setProgress(progress);
   }
  });
 }

Nessun commento:

Posta un commento