我有一个音量控制滑块来控制Android中音频文件播放的音量。
vSlider=(SeekBar) findViewById(R.id.seekBar2);
vSlider.setMax(10);
if(mediaPlayer.isPlaying()){
isPlaying=true;
try {
currentPosition = mediaPlayer
.getCurrentPosition();
double seconds=currentPosition/1000;
int time= (int) Math.round(seconds);
String timeS=Integer.toString(time);
timer.setText(timeS+"s");
Log.d("position",timeS);
fSlider.setProgress(currentPosition);
} catch (Exception e) {
}
vSlider.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
float volume=progress/10;
Log.d("Progress", String.valueOf(progress));
Log.d("Volume",String.valueOf(volume));
mediaPlayer.setVolume(volume, volume);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) { }
@Override
public void onStopTrackingTouch(SeekBar seekBar) { }
});
正在正确检测滑块进度的int值,但浮动体积始终为0.0。我在这做错了什么?
答案 0 :(得分:4)
float volume=progress/10;
对两个int
的操作会将结果显示为int
。所以将结果转换为
float volume=(float)progress/10;
或
float volume=progress/10.0f;
请参阅casting hierarchy有显式和隐式演员
答案 1 :(得分:1)
使用float
文字10.0f
强制进行浮点运算。
float volume=progress/10.0f;
默认情况下,以下代码的 R.H.S 是整数airthmetic表达式:
float volume=progress/10;
由于progress
是int
而10
是int
字面值。由于它执行整数除法,如果progress
小于10
,则表达式将评估为0
,而volume
将为{{1} }}
答案 2 :(得分:1)
在第
行float volume=progress/10;
首先您正在执行整数除法progress/10
并获得整数结果(如果progress
为< 10
则为0
},你将获得float
),然后你只是将结果投射到float volume=(float)progress/10;
。
你想要一个浮点除法:
progress
在那里,我们首先找到float
并将其设为{{1}},然后进行除法并保存结果。
答案 3 :(得分:0)
float volume=progress/10.0;
按照上面的说法做出正确答案。 Int除以int将始终是一个整数,您只需将整数0赋值为float,结果将为0.0
答案 4 :(得分:0)
那是因为类型转换:
当您执行任何int/int
时 - 输出在&gt; int
然后被分配给浮动
所以如果你想在float中输出
float/int
或int/float
- 输出位于 - &gt; float
牢记这一点:
float value = progress/10.0f //as by default 10.0 is double in java
答案 5 :(得分:0)
那是因为你正在进行整数除法,然后将结果转换为浮点数。试试这个:
float volume = progress / 10.0f;