1

我有一个音量控制滑块来控制 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。我在这里做错了什么?

4

6 回答 6

4
float volume=progress/10;

对两个操作int给出的结果为int。所以将结果转换为

float volume=(float)progress/10;

或者

float volume=progress/10.0f;

请参阅转换层次结构有显式和隐式转换

于 2013-07-30T07:14:37.493 回答
1

在行

float volume=progress/10;

首先你要进行整数除法progress/10并得到一个整数结果(所以如果progress是任何东西< 10,你会得到0),然后你只是将该结果转换为float.

你想要一个浮点除法:

float volume=(float)progress/10;

在那里,我们首先progress将其设为 a float然后进行除法并保存结果。

于 2013-07-30T07:15:09.697 回答
1

使用float文字10.0f来强制进行浮点运算。

float volume=progress/10.0f;

默认情况下,以下代码的RHS是一个整数 airthmetic 表达式:

float volume=progress/10;

因为progress是一个int并且10是一个int字面量。由于它执行整数除法,如果progress小于10,则表达式将计算为0并且volume将是0.0

于 2013-07-30T07:14:47.667 回答
0
float volume=progress/10.0;

像上面那样做以获得正确的答案。Int 除以 int 将始终是一个整数,您只是将整数 0 分配给 float ,结果将为 0.0

于 2013-07-30T07:15:21.460 回答
0

那是因为类型转换:

当您执行任何int/int--Output is in->int然后分配给float

所以如果你想输出浮点数

float/intint/float-- 输出在 -->float

牢记这一点:

float value = progress/10.0f //as by default 10.0 is double in java
于 2013-07-30T07:17:31.420 回答
0

那是因为您正在进行整数除法,然后将结果转换为浮点数。试试这个:

float volume = progress / 10.0f;
于 2013-07-30T07:18:18.627 回答