如何动态划分进度

How to divide progress dynamically

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

使用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] 映射到每个离散音量级别。)