martedì 27 maggio 2014

SeekBar con valori negativi

Come molti di voi sapranno la classe SeekBar del pacchetto android non consente di impostare valori negativi poichè non dispone neppure del metodo setMin. Essa, infatti, parte dal valore zero che è, appunto, il valore minimo di default. In questo articolo vediamo come creare il metodo setMin per poter consentire di impostare dei valori negativi.

Per comodità io ho creato direttamente un'altra classe che estende SeekBar ma c'è la possibilità di fare il tutto anche senza creare una nuova classe, anche se non ci ho ancora provato. Il codice che posterò di seguito è molto semplice e non richiede delle particolari conoscenze per essere appreso se non la logica.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class SeekBarMod extends SeekBar {

 int valoreMinimo;
 
 public SeekBarMod(Context context) {
  super(context);
  // TODO Auto-generated constructor stub
 }
 
 public SeekBarMod(Context context, AttributeSet attrs) {
  super(context, attrs);
  // TODO Auto-generated constructor stub
 }
 
 public SeekBarMod(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
  // TODO Auto-generated constructor stub
 }

 public void setMin(int valoreMinimo) {
  this.valoreMinimo = valoreMinimo;
  setMax(getMax());
 }
 
 @Override
 public void setMax(int valoreMassimo) {
  super.setMax(valoreMassimo-valoreMinimo);
 }
 
 @Override
 public void setProgress(int progresso) {
  super.setProgress(progresso-valoreMinimo);
 }

 public int progresso() {
  return super.getProgress()+valoreMinimo;
 }
 
}

Per prima cosa abbiamo ereditato i tre costruttori della classe SeekBar del pacchetto Android. In secondo luogo abbiamo creato il metodo setMin che accetta come parametro una variabile intera che sarà il valore minimo della SeekBar stessa e, successivamente, otteniamo il valore massimo che passiamo poi al metodo setMax che passerà al metodo setMax della classe madre un numero intero ottenuto dalla sottrazione tra il valore massimo e quello minimo. Infine, per poter ottenere il riferimento del progresso corrente dovete usare il metodo progresso che ritornerà, semplicemente, un numero intero ottenuto dall'addizione tra il progresso corrente e il valore minimo. Questo è tutto. Ringrazio il mio amico Andrea Demattè per avermi aiutato a realizzare la classe in questione.

Nessun commento:

Posta un commento