Android java:使用seekbar';正确地进行数值计算
我目前在我的应用程序中使用了两个seekbar。有两个给我带来麻烦。我将这两个seekbar的最大值设置为10 我将使用seekbars的值来更改代码中的2个数字 基本上,我有两个变量,它们有一个范围。一种是蛋白质mod,可以是0.8到1.0之间的任意值,而脂肪mod可以是0.3到0.6之间的任意值。我从seekbar中获取progressValue,并将该值转换为存储为double的百分比,然后计算公式Android java:使用seekbar';正确地进行数值计算,java,android,seekbar,Java,Android,Seekbar,我目前在我的应用程序中使用了两个seekbar。有两个给我带来麻烦。我将这两个seekbar的最大值设置为10 我将使用seekbars的值来更改代码中的2个数字 基本上,我有两个变量,它们有一个范围。一种是蛋白质mod,可以是0.8到1.0之间的任意值,而脂肪mod可以是0.3到0.6之间的任意值。我从seekbar中获取progressValue,并将该值转换为存储为double的百分比,然后计算公式 proteinmod = proteinmod = 0.8+(progressValue/
proteinmod = proteinmod = 0.8+(progressValue/10)*0.2;
fatmod = 0.3+(progressValue/10)*0.3;
我的问题:seekbar只是半功能的。当一直向左时,它们是预期范围的最小值-但保持该值,直到seekbar完全达到最大值,然后将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;
及
由于progressValue和10都是整数,因此除法的结果是整数。投10比1应该可以解决这个问题。哦,哇,非常感谢!完全按照我想要的方式修复了它。我一直认为,如果你用一个整数和一个双精度来做数学运算,那么这个整数会被用在它的双精度对应项中。谢谢你把这件事弄清楚!
fatmod = 0.3+(progressValue/10d)*0.3;