如何动态划分进度

时间:2015-01-07 14:50:40

标签: android android-custom-view android-seekbar

由于我们有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,依此类推。

1 个答案:

答案 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.floorMath.round可用于代替Math.ceil,具体取决于您希望如何将范围[0,1000]映射到每个离散音量级别。)