2012-02-03 47 views
0

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

我会从现在开始编程的机器人,并希望帮助,如下:

我有ID =价值 和一个搜索栏使用id =搜索条一个TextView。

通缉栏0-200比1合1,显示TextView中的值。 并纠正敏感问题想知道如何把两个按钮+和 - 增加或减少一个。

我代表我所有的大学班级感谢你。

回答

2

你应该问这样的问题,一般有前阅读文档。事实上,我想用通俗的话来回答这个问题。只要将seekbar想象成一个简单的传感器即可。它可以触发onProgressChanged()等事件。意思是,seekbar的界面可以告诉我们什么时候seekbar的进度发生了变化。因此,我们可以在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 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> 

随意问,如果你对这个代码有任何疑问的XML。 顺便说一下,这不是一个代码生成论坛!似乎我打破了SOF条款之一... :)

+0

谢谢,我会测试 – GDawson 2012-02-03 13:37:35

+0

了一些错误,大多数确认一切都刚刚好请。 他的回答是最好的 – GDawson 2012-02-03 16:46:24

1

要收听寻找位置的变化,使用

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

谢谢,我会测试 – GDawson 2012-02-03 13:37:16

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> 

监听器进度条(伪)

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

谢谢,我会测试 – GDawson 2012-02-03 13:37:28

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

     } 
    }); 
}