SeekBar Объяснение - PullRequest
       5

SeekBar Объяснение

0 голосов
/ 03 февраля 2012

Я заметил, что многие люди ищут ответ на один и тот же вопрос, однако у них всегда разные результаты и они неполные, я хотел бы, чтобы кто-то объяснил как можно проще объяснить всем пользователям.

Я начну программировать Android сейчас и хотел помочь, выглядит следующим образом:

У меня есть TextView с id = значение и один SeekBar с id = seekbar.

Требуется панель поиска 0-200, а не 1 в 1, показывающая значения в TextView. И чтобы исправить проблему чувствительности было интересно, как поставить две кнопки + и - для увеличения или уменьшения.

Я благодарю вас от имени всего моего класса в колледже.

Ответы [ 4 ]

2 голосов
/ 03 февраля 2012

Вы должны были прочитать документацию, прежде чем задавать такой общий вопрос. Действительно, я хотел бы ответить на этот вопрос с точки зрения непрофессионала. Просто подумайте о seekbar как о простом датчике. Он может запускать такие события, как onProgressChanged (). Значит, интерфейс для seekbar может сообщать нам, когда изменяется прогресс searchbar. Таким образом, мы можем выполнять некоторые операции внутри обратных вызовов, предоставляемых Android. Итак, взгляните на код и убедитесь, что это то, что вы ищете. Это тестовое приложение, которое я создал для этого вопроса.

public class SeekbarActivity extends Activity implements SeekBar.OnSeekBarChangeListener    {
    private SeekBar seekbar;
    private TextView value;
    private Button plus,minus;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        value = (TextView) findViewById(R.id.value);
        seekbar = (SeekBar) findViewById(R.id.seekbar);
        plus = (Button) findViewById(R.id.plus);
        minus = (Button) findViewById(R.id.minus);
        seekbar.setOnSeekBarChangeListener(this);
        seekbar.setMax(201);
        plus.setOnClickListener(new OnClickListener()   {
            @Override
            public void onClick(View v) {seekbar.setProgress((int)seekbar.getProgress() + 1);}});
        minus.setOnClickListener(new OnClickListener()  {
            @Override
            public void onClick(View v) {seekbar.setProgress((int)seekbar.getProgress() - 1);}});
    }

    @Override
    public void onProgressChanged(SeekBar arg0, int progress, boolean fromTouch) {
        value.setText(String.valueOf(progress));
    }
    @Override
    public void onStartTrackingTouch(SeekBar arg0) {}
    @Override
    public void onStopTrackingTouch(SeekBar arg0) {}
}

И это XML, используемый для этого приложения

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/value"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Progress" />
    <SeekBar
        android:id="@+id/seekbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/plus"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="+" />
    <Button
        android:id="@+id/minus"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="-" />
</LinearLayout>

Не стесняйтесь спрашивать, есть ли у вас сомнения по поводу этого кода. Кстати, это не форум для генерации кода! Похоже, я нарушаю одно из условий SOF ...:)

1 голос
/ 03 февраля 2012

Чтобы прослушать изменения позиции поиска, используйте

onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)

seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
{
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
    {
        txtProgress.setText(""+progress);
    }
});

на кнопках + и - Нажать на инструмент onClickListener, а в методе onClick напишите

int newProgress=seekBar.getProgress()+10;
seekBar.setProgress(""+newProgress);
0 голосов
/ 25 июля 2012

Здесь вам не нужны две разные кнопки для выполнения операций увеличения и уменьшения.
Просто установите здесь начальную и конечную позиции и выполните операции, они будут работать так, как вам нужно.
Попробуйте этот код ...

float discrete=0; 
 float start=0; 
 float end=100; 
 float start_pos=0; 
 int start_position=0; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    start=-10;      //you need to give starting value of SeekBar 
end=10;         //you need to give end value of SeekBar 

    SeekBar seek=(SeekBar) findViewById(R.id.seekBar1); 
    seek.setProgress(start_position); 
    seek.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

        @Override 
        public void onStopTrackingTouch(SeekBar seekBar) { 
            // TODO Auto-generated method stub 
            Toast.makeText(getBaseContext(), "discrete = "+String.valueOf(discrete), Toast.LENGTH_SHORT).show(); 
        } 

        @Override 
        public void onStartTrackingTouch(SeekBar seekBar) { 
            // TODO Auto-generated method stub 

        } 

        @Override 
        public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) { 
            // TODO Auto-generated method stub 
            // To convert it as discrete value 
            float temp=progress; 
            float dis=end-start; 
            discrete=(start+((temp/100)*dis)); 

        } 
    }); 
} 
0 голосов
/ 03 февраля 2012

Предположим, что это тот интерфейс, который вам нужен (довольно плохой рисунок ASCII)

                +-------------------+
                | Progress bar value|
                |     TextView      |
                +-------------------+
+-----+              Progress Bar               +-----+
|  -  | |--------------------------------------||  +  |
+-----+                                         +-----+

Макет, необходимый для достижения этого (псевдокод)

<RelativeLayout>
    <TextView id=progValue
     alignHorizontalCenter=true>
    <ProgressBar id=progBar
     alignHorizontalCenter=true
     layout_below=id/progValue
     android:max=200>
    <Button id=negative
     layout_toLeftof=id/progBar>
    <Button id=positive
     layout_toRightof =id/progBar>
</RelativeLayout>

Слушатель для индикатора выполнения (псевдокод)

progBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() 
{ 
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) 
    { 
        progValue.setText(""+progress); 
    } 
}); 

Слушатель для кнопок (псевдокод)

OnClickListener(){
    public void onClick(View v) { 
        if(positive == v){
            progBar.setProgress(progBar.getProgress()+1);
        }else if (negative == v){
            progBar.setProgress(progBar.getProgress()-1);
        }
    }
}               
...