SeekBar解释

时间:2012-02-03 11:48:51

标签: android seekbar

我注意到很多人在寻找相同问题的答案,但他们总是有不同的结果而且不完整,我希望有人帮助解释尽可能简单的帮助所有用户。

我现在开始编程Android并希望得到帮助,如下:

我有一个id = value的TextView 和一个ID = seekbar的SeekBar。

希望搜索栏0-200而不是1合1,显示TextView中的值。 并纠正敏感问题是想知道如何把两个按钮+和 - 增加或减少一个。

我代表我所有的大学课程表示感谢。

4 个答案:

答案 0 :(得分:2)

在询问这样一般性问题之前,您应该阅读文档。实际上,我想以外行的方式回答这个问题。想想seekbar作为一个简单的传感器。它可以触发像onProgressChanged()这样的事件。意思是,搜索栏的界面可以告诉我们搜索栏进度何时改变。因此,我们可以在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 :(得分:1)

要收听搜索位置更改,请使用

onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)

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

on +和 - 按钮单击实现onClickListener,在onClick方法中,写

int newProgress=seekBar.getProgress()+10;
seekBar.setProgress(""+newProgress);

答案 2 :(得分:0)

假设这是您想要的UI(非常糟糕的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>

Progress Bar(伪代码)的监听器

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);
        }
    }
}               

答案 3 :(得分:0)

在这里你不需要两个不同的按钮来执行增量和放大减少操作。
只需在此处设置开始和结束位置并执行操作,它将按照您的需要执行 试试这段代码......

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)); 

        } 
    }); 
}