由于我们有seekbar,我们可以将其setMax()和setProgress设置为seekBar ..
seekBar .setMax(audioManager
.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
seekBar .setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));
现在我创建了一个有1000个进度的自定义视图,我怎么能动态地分配它的音量。
我想将音量最大值和当前进度设置为我的视图。但它必须动态处理1000个百分比,因为有些手机有13个音量,有些有11个或更少。我怎么能动态地划分它们。
我怎么能分发这些进展
I also check AbsSeekBar setMax method
假设
我有10个音量级别,然后当音量达到100或更高时,我添加一个上升级别,大于200个音量级别转到2,依此类推。
答案 0 :(得分:2)
使用Math.ceil
来实现这一目标。例如,如果我想将[0,1000]范围内的值v
转换为13个不同的离散级别之一,我可以执行类似
int level = (int) Math.ceil((v/1000.0) * 13)
(在这里使用1000.0避免整数除v/1000
为[0,1000]中v的所有值返回0。)
然后,对于这种情况:
v
= 0 - > level
= 0 v
= 1000 - > level
= 13 v
= 437 - > level
= (int) Math.ceil(5.681)
= 6 等。 (注意,如果你包含0,这实际上是14级,所以你可能想要使用
int level = (int) Math.ceil((v/1000.0) * (n-1))
获得n
级别。另请注意,Math.floor
和Math.round
可用于代替Math.ceil
,具体取决于您希望如何将范围[0,1000]映射到每个离散音量级别。)