Android java: 正确使用搜索栏的进度值
Android java: Using a seekbar's progressValue correctly
我目前在我的应用程序中使用了几个搜索栏。有两个给我带来麻烦。我将这两个搜索栏的最大值设置为 10。
我将使用搜索栏的值来更改代码中的 2 个数字。
基本上,我有 2 个具有范围的变量。一种是蛋白质 mod,可以是 0.8 到 1.0 之间的任何值,而脂肪mod 可以是 0.3 到 0.6 之间的任何值。我正在从 seekbar 中获取 progressValue 并将该值转换为存储为双精度的百分比,然后执行等式
proteinmod = proteinmod = 0.8+(progressValue/10)*0.2;
fatmod = 0.3+(progressValue/10)*0.3;
我的问题: 搜索栏只是半功能。当一直向左时,它们是预期范围的最小值 - 但保持该值直到搜索栏一直最大化,然后 proteinmod 和 fatmod 是设置在那里最大。我尝试将 textview 设置为等于进度值并在各个位置对其进行测试,并且 progressValue 确实可以正常工作。但出于某种原因,这些 mod 值不会在我想要的范围内的任何其他地方采用值。这是我的代码。提前致谢!
double proteinmod = 0;
double fatmod = 0;
seekbar2.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progressValue, boolean fromUser) {
proteinmod = 0.8+(progressValue/10)*0.2;
tv6.setText(String.valueOf(proteinmod));
updateOutput();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
});
seekbar3.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progressValue, boolean fromUser) {
fatmod = 0.3+(progressValue/10)*0.3;
tv6.setText(String.valueOf(fatmod));
updateOutput();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
});
我相信这应该是您需要的全部代码,但如果您需要其他部分,请随时询问。
尝试以下操作:
proteinmod = 0.8+(progressValue/10d)*0.2;
和
fatmod = 0.3+(progressValue/10d)*0.3;
由于 progressValue 和 10 都是整数,所以除法结果是整数。将 10 转换为 double 应该可以解决问题。
我目前在我的应用程序中使用了几个搜索栏。有两个给我带来麻烦。我将这两个搜索栏的最大值设置为 10。
我将使用搜索栏的值来更改代码中的 2 个数字。
基本上,我有 2 个具有范围的变量。一种是蛋白质 mod,可以是 0.8 到 1.0 之间的任何值,而脂肪mod 可以是 0.3 到 0.6 之间的任何值。我正在从 seekbar 中获取 progressValue 并将该值转换为存储为双精度的百分比,然后执行等式
proteinmod = proteinmod = 0.8+(progressValue/10)*0.2;
fatmod = 0.3+(progressValue/10)*0.3;
我的问题: 搜索栏只是半功能。当一直向左时,它们是预期范围的最小值 - 但保持该值直到搜索栏一直最大化,然后 proteinmod 和 fatmod 是设置在那里最大。我尝试将 textview 设置为等于进度值并在各个位置对其进行测试,并且 progressValue 确实可以正常工作。但出于某种原因,这些 mod 值不会在我想要的范围内的任何其他地方采用值。这是我的代码。提前致谢!
double proteinmod = 0;
double fatmod = 0;
seekbar2.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progressValue, boolean fromUser) {
proteinmod = 0.8+(progressValue/10)*0.2;
tv6.setText(String.valueOf(proteinmod));
updateOutput();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
});
seekbar3.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progressValue, boolean fromUser) {
fatmod = 0.3+(progressValue/10)*0.3;
tv6.setText(String.valueOf(fatmod));
updateOutput();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
});
我相信这应该是您需要的全部代码,但如果您需要其他部分,请随时询问。
尝试以下操作:
proteinmod = 0.8+(progressValue/10d)*0.2;
和
fatmod = 0.3+(progressValue/10d)*0.3;
由于 progressValue 和 10 都是整数,所以除法结果是整数。将 10 转换为 double 应该可以解决问题。