我注意到许多人在寻找相同问题的答案,但他们总是有不同的结果和不完整的,我希望有人帮助解释尽可能简单,以帮助所有用户。SeekBar解释
我会从现在开始编程的机器人,并希望帮助,如下:
我有ID =价值 和一个搜索栏使用id =搜索条一个TextView。
通缉栏0-200比1合1,显示TextView中的值。 并纠正敏感问题想知道如何把两个按钮+和 - 增加或减少一个。
我代表我所有的大学班级感谢你。
我注意到许多人在寻找相同问题的答案,但他们总是有不同的结果和不完整的,我希望有人帮助解释尽可能简单,以帮助所有用户。SeekBar解释
我会从现在开始编程的机器人,并希望帮助,如下:
我有ID =价值 和一个搜索栏使用id =搜索条一个TextView。
通缉栏0-200比1合1,显示TextView中的值。 并纠正敏感问题想知道如何把两个按钮+和 - 增加或减少一个。
我代表我所有的大学班级感谢你。
你应该问这样的问题,一般有前阅读文档。事实上,我想用通俗的话来回答这个问题。只要将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条款之一... :)
要收听寻找位置的变化,使用
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);
谢谢,我会测试 – GDawson 2012-02-03 13:37:16
假设这是你想要的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);
}
}
}
谢谢,我会测试 – GDawson 2012-02-03 13:37:28
在这里你不需要两个不同的按钮来执行增量&递减操作。
只需在此设置开始和结束位置并执行操作,它将按照您的需要执行。
试试这个代码...
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));
}
});
}
谢谢,我会测试 – GDawson 2012-02-03 13:37:35
了一些错误,大多数确认一切都刚刚好请。 他的回答是最好的 – GDawson 2012-02-03 16:46:24