2011-09-07 22 views
28

Bir arama çubuğum var, taşırken, 0 ile 200 arasındaki değerleri değiştirmek istiyorum. Bir TextView'im var, burada bu değerleri arama çubuğunu taşırken gösteriyorum. Ama o aralıktan her değere sahip olmak istemiyorum (0,1,2,3,4,5 ...), ama 10, 20, 30 ... var. Bu yüzden, arama çubuğunu hareket ettirdiğimde, 10,20,30,40 .... değerini 200 olarak görmek istiyorum. Birisi bana bunun nasıl yapılacağına dair bir ipucu veya örnek verebilir mi?Arama çubuğundaki adım değerleri değiştiriliyor mu?

cevap

84

deneyin

SeekBar seekBar = (SeekBar)layout.findViewById(R.id.seekbar); 
seekBar.setProgress(0); 
seekBar.incrementProgressBy(10); 
seekBar.setMax(200); 
TextView seekBarValue = (TextView)layout.findViewById(R.id.seekbarvalue); 
seekBarValue.setText(tvRadius.getText().toString().trim()); 

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){ 

    @Override 
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
     progress = progress/10; 
     progress = progress * 10; 
     seekBarValue.setText(String.valueOf(progress)); 
    } 

    @Override 
    public void onStartTrackingTouch(SeekBar seekBar) { 

    } 

    @Override 
    public void onStopTrackingTouch(SeekBar seekBar) { 

    } 
}); 

setProgress(int) İsterseniz çubuğunu

aramaya maksimum değerini ayarlamak için kullanılır arama çubuğu

setMax(int) başlangıç ​​değerini ayarlamak için kullanılır Arama çubuğunun sınırlarını ayarladıktan sonra onProgressChanged yöntemindeki progressbar değerini kontrol edebilirsiniz. İlerleme, sınırdan küçük veya daha büyükse, ilerlemeyi tanımladığınız sınırlara ayarlayabilirsiniz. Aklıma

+0

Vay, bu sadece harika bir örnek! Her neyse, arama çubuğunun min değerini 10 olarak ayarlayabilir miyim? Max'i "seekBar.setMax (200)" diyerek ayarlayabilirim, min değeri yok.Bunun nasıl yapılacağı hakkında bazı fikirlerim var, ancak her seferinde hata alıyorum ( – lomza

+0

Use seekBar.setProgress (10); – Dharmendra

+0

arama çubuğunda 10'a set değerini ayarlamak için bu sorunu çözdüm. 10, ben hala 0 ayarlamak mümkün oldu ve ben bu seçeneği (böylece kullanıcı 10'dan daha az bir değer seçemezsiniz) yapmak istedim.Bunu yaptım ama ChangeListener bir 'if' ifadesini koyarak. – lomza

3

İlerleme değişikliğini izlemek için SeekBar.OnSeekBarChangeListener'u kullanmalısınız. mseek.setMax(200) numaralı telefonu arayın. Metin görünümünün güncellenip güncellenmeyeceğine karar vermek için mevcut değerde bir modülasyon işlemi yapın. kodunun altına

SeekBar.OnSeekBarChangeListener() { 

    void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
     if (progress % 10 == 0) { 
      textview.setText(""+progress); 
     } 
    } 
} 
+2

Bu, çubuk çok geniş değilse ve/veya parmağınız hızlı hareket ederse, muhtemelen değerleri atlayacaktır. –

+0

Kabul ediyor. Bu aklıma gelen ilk şeydi. ve doğru cevap değil. – Ronnie

+0

Bu güzel bir örnektir, fakat @Kris Van Bael haklıdır, - değerleri atlar. – lomza

15

easieset yolu, basitçe tanımlıyor:

SeekBar yourSeekBar = (SeekBar)findViewById(R.id.yourSeekBarId); 
yourSeekbar.setMax(20); 

Sonraki, bu yöntemleri geçersiz kılmak (boş yöntemler de boş olsalar bile, gereklidir):

yourSeekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {   
     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 

     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 

     } 

     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
      if (fromUser) { 
       if (progress >= 0 && progress <= sizeSeekBar.getMax()) {       

        String progressString = String.valueOf(progress * 10); 
        yourTextView.setText(progressString); // the TextView Reference 
        seekBar.setSecondaryProgress(progress); 
       } 
      } 

     } 
    }); 

Fikir, yalnızca arama çubuğu için 20 değer tanımlamak, ancak her zaman değeri 10 ile çarpmak ve bu değeri görüntülemek. Gerçekten 200 değere ihtiyacınız yoksa, 200 değeri kullanmanın bir anlamı yoktur. En az sayı için

+2

+1. Başka bir konu için aradım, burada sona erdi, ama +1 –

+0

hakettiğini düşündüm Bu, daha iyi bir çözüm gibi görünüyor. Bir sonraki numaraya nasıl atladığını seviyorum. Sayı statik iken ilerlemek garip görünüyor. –

0

, ilerlemenizde bir sapma belirleyebilirsiniz. Bu şekilde, kullanıcı minimum değerinizin altına giremez.

int offset = 10; 

seekBar seekBar = (SeekBar)layout.findViewById(R.id.seekbar); 
seekBar.setProgress(0); 
seekBar.setMax(190); //with the offset, you need to adapt the max value 
TextView seekBarValue = (TextView)layout.findViewById(R.id.seekbarvalue); 
seekBarValue.setText(""+(seekBar.getProgress() + offset)); 

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){ 

    @Override 
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
     progress += offset; 

     seekBarValue.setText(String.valueOf(progress)); 
    } 

    @Override 
    public void onStartTrackingTouch(SeekBar seekBar) { 

    } 

    @Override 
    public void onStopTrackingTouch(SeekBar seekBar) { 

    } 
}); 
1

Ayrıca

public class CustomSeekBar extends AppCompatSeekBar { 


int SEEKBAR_MULTIPLIER = 1; 

public CustomSeekBar(Context context) { 
    super(context); 
} 

public CustomSeekBar(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public CustomSeekBar(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
} 

public void setSeekBarConfig(int SEEKBAR_MULTIPLIER, int SEEKBAR_MAX){ 
    setMax(SEEKBAR_MAX); 
    this.SEEKBAR_MULTIPLIER = SEEKBAR_MULTIPLIER; 
} 

@Override 
public int getProgress() { 
    return super.getProgress() * SEEKBAR_MULTIPLIER; 
} 
} 

aşağıdaki gibi özel seekbar sınıfı belirlenerek bunu başarabilirsiniz Ve bunun yerine seekbar

ait CustomSeekBar eklemek gerekir xml biçimini

CustomSeekBar mCustomSeekBar = (CustomSeekBar) findViewById(R.id.customSeekBar); 
mSeekBar.setSeekBarConfig(10,20); 

takip ederek kullanabilirsiniz

<*.CustomSeekBar 
    com.quemb.qmbform.view:setSeekBarConfig="10" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/seekBar" /> 

Böylece tüm App içinde özel seekBar tekrar tekrar tüm ekstra hesaplama ile yeniden kullanabilirsiniz.

İlgili konular