如何动态划分进度
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.floor
和 Math.round
可用于代替 Math.ceil
,具体取决于您希望如何将范围 [0,1000] 映射到每个离散音量级别。)
因为我们有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
= 0v
= 1000 -->level
= 13v
= 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] 映射到每个离散音量级别。)