我有一个音量控制滑块来控制在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。我在这里做错什么了?
发布于 2013-07-30 07:14:37
float volume=progress/10;对两个int进行操作,结果为int。所以把结果
float volume=(float)progress/10;或
float volume=progress/10.0f;参见铸造层次有显式和隐式强制转换
发布于 2013-07-30 07:14:47
使用float文本10.0f强制使用浮点算法。
float volume=progress/10.0f;默认情况下,以下代码的R.H.S是一个整数模拟表达式:
float volume=progress/10;因为progress是int,而10是int文字。由于它执行整数除法,如果progress小于10,表达式将计算为0,volume将为0.0。
发布于 2013-07-30 07:15:09
排在队伍里
float volume=progress/10;首先要执行整数除法progress/10,然后得到一个整数结果(如果progress是< 10,则得到0),然后将结果转换为float。
你想要一个浮点除法而不是:
float volume=(float)progress/10;在这里,我们首先对progress进行访问并使其成为一个float,然后进行除法并保存结果。
https://stackoverflow.com/questions/17940528
复制相似问题