Java 如何根据SeekBar'设置WaveView的波高;有什么进展?
上面的Java 如何根据SeekBar'设置WaveView的波高;有什么进展?,java,android,Java,Android,上面的GIF是我的音乐播放器的当前外观 中央布局,前面是一个简单的音符矢量可绘制 我首先尝试根据SeekBar的进度设置Waveview进度,而不播放任何歌曲来测试它。它工作得非常好(参见kbars current progress/100,即0.01到1.00) 现在我想做的是根据歌曲的进度设置WaveView的水位 播放歌曲时,水位将从0.0f设置为1.0f,并显示白色音符图标 请注意,WaveView的水位只能从0.0f设置为1.0f 我尝试了多种方法,但都没能解决这个问题 这是我的代码,
GIF
是我的音乐播放器的当前外观
中央布局
,前面是一个简单的音符矢量可绘制
我首先尝试根据SeekBar
的进度设置Waveview
进度,而不播放任何歌曲来测试它。它工作得非常好(参见kbars current progress/100,即0.01
到1.00
)
现在我想做的是根据歌曲的进度设置WaveView的水位
播放歌曲时,水位将从0.0f
设置为1.0f
,并显示白色音符图标
请注意,WaveView
的水位只能从0.0f
设置为1.0f
我尝试了多种方法,但都没能解决这个问题
这是我的代码,应该返回0.01、0.02等等…:
this.runOnUiThread(new Runnable() {
@Override
public void run() {
if (mainMediaPlayer != null) {
currentDurationPosition = mainMediaPlayer.getCurrentPosition()/1000;
songSeekBar.setProgress(currentDurationPosition+1);
topSongTitle.setText(songsList.get(currentSongPosition).getName());
songCircleProgress.setWaterLevelRatio(currentDurationPosition/mainMediaPLayer.getDuration());
} else {
Toast.makeText(MainActivity.this, "No song is playing now", Toast.LENGTH_SHORT).show();
}
handler.postDelayed(this, 1000);
}
});
在重新阅读您的代码后,我想我在这里看到了两个问题: 首先,您的
staticFloat
初始化:
private static float staticFloat = 1/100;
通过这样做,您实际上是在进行整数除法,然后将其转换为浮点。整数除法中的1/100等于0,因此您的浮点值将始终为0.0f。
要获得0.01的值,需要执行以下操作
private static float staticFloat = 1/100f; // or 1f/100
通过这种方式,您将int除以一个浮点,或者相反,它将产生一个浮点结果
其次,您的getWaterPosition
函数。当进度为0时,您将返回0。在其他任何情况下,你都会回来,嗯。。。我也是
为什么??你正在处理每一个案子
returnPosition = minusPosition - (minusPosition - staticFloat);
这相当于:
returnPosition = minusPosition - minusPosition + staticFloat;
returnPosition = staticFloat;
同样相当于:
returnPosition = minusPosition - minusPosition + staticFloat;
returnPosition = staticFloat;
正如我们之前所看到的,当你修正它时,它总是0,甚至是0.01f
我猜你在使用这个公式时犯了一些错误。但是如果只执行returnprogress/100f这样的操作,它会不会工作代码>
您还可以在xml中为seekbar添加一个最大值,这样它就永远不会超过100,并且您的返回值将在0.0f和1.0f之间
<SeekBar
// initialisation
android:max="100"/>
我不确定我是否理解了所有内容,如果你在没有这首歌的情况下成功了,那么添加这首歌有什么区别?为什么它不能像以前那样只使用progress/100?使用当前函数,除非进度>=10000@Macmist我一直都知道如何得到0.0的值。这就是我问这个问题的原因。我猜我的朋友上传了错误的代码,把事情搞得一团糟,而这些代码不是我的。对不起!这不是我一直坚持的代码。但通过你的建议,我成功地解决了这个问题。谢谢!我把原来的问题,我得到并接受你的答案!我已经提出了我面临的最初问题。我不知道我朋友从哪里得到的那套糟糕的密码。再次感谢您的关注!我已经接受了答案,它通过在这里输入f帮助我解决了问题:songCircleProgress.setWaterLevelRatio((currentDurationPosition/1f)/(mainMediaPLayer.getDuration()/1f))代码>