使用系统 Seekbar 来表示浮点数

使用 Seekbar 来表示小数

需求来源

我们在日常开发中使用 seekbar 时可能更多的是表示整型数据的拖动条,但是在某一些场合如果数据类型是浮点数的话呢,我们该怎么办?

分析

我们都知道系统提供的 Seekbar 类的进度值 progress 是整型的,它无法表示浮点型数据。但是我们可以巧妙的利用系统的 API 实现 seekbar 表示浮点类型,具体看下面的代码片段。

Seekbar 表示整型数据

SeekBar seekBar = (SeekBar) findViewById(R.id.seekbar);
seekBar.setMax(5);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                Log.e("TAG","当前进度值:"+progress);
            }

            public void onStartTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub
            }

            public void onStopTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub
            }
    };

通过以上这段代码运行之后滑动 seekbar 会打印当前的进度值 progress。

当前进度值:0
当前进度值:1
当前进度值:2
当前进度值:3
当前进度值:4
当前进度值:5

使用 Seekbar 表示浮点型数据

先看看需求:使用 seekbar 表示 [0-1] 之间的值,保留 1 位小数。

我们看了 Seekbar 表示整型数据时,会在回调方法中 onProgressChanged 回调当前的 progress 值,那么我们能不能在这个方法做处理呢?

答案是可以的:因为 progress 不能设置浮点数,那么我们可以将每一个数放大 10 倍,不就可以表示在 seekbar 了吗?具体过程看下面

解决方案:

  • 设置 Seekbar 最大值为 10
  • 在 onProgressChanged 方法中,将 progress 值除 10 那么就可以得到 [0-1] 之间的值了
SeekBar seekBar = (SeekBar) findViewById(R.id.seekbar);
seekBar.setMax(5);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                Log.i("TAG","当前进度值:"+progress);
                float value = convertProgress(progress);
                Log.i("TAG","转化后的值:"+value);
            }

            public void onStartTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub
            }

            public void onStopTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub
            }
    };
    
private float convertProgress(int intVal) {
    float result;
    //这里/10 是因为前面每一个数都扩大10倍,因此这里需要/10还原
    result = intVal/10f;
    return result;
}

打印的结果值:

当前进度值:0
转化后的值:0
当前进度值:1
转化后的值:0.1
当前进度值:2
转化后的值:0.2
当前进度值:3
转化后的值:0.3
当前进度值:4
转化后的值:0.4
当前进度值:5
转化后的值:0.5

总结

这种方式是借助回调方法,在回调方法中处理 progress 的值,可以巧妙的将浮点数的值使用 seekbar 来表示。
好了,文章就分享到这里,下一篇分享一下如何让水平排版的 seekbar 竖直显示。

    原文作者:未见哥哥
    原文地址: https://www.jianshu.com/p/8f8ae0b640e5
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞