使用系统 Seekbar 来表示浮点数

作者: 未见哥哥 | 来源:发表于2017-12-04 23:47 被阅读600次

使用 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 竖直显示。

相关文章

  • 使用系统 Seekbar 来表示浮点数

    使用 Seekbar 来表示小数 需求来源 我们在日常开发中使用 seekbar 时可能更多的是表示整型数据的拖动...

  • Android自定义Seekbar

    提要 系统的SeekBar无法满足我们的使用,自定义控件开发SeekBar 系统SeekBar属性分析 SeekB...

  • 浮点数

    双精度浮点数类型 double单精度浮点数类型 float 以上两种都使用 浮点数 来表示小数 : 与之相对的是 ...

  • 数据类型操作( 其他)

    浮点数 Python 中使用浮点数来表示不是整数的数字。 浮点数表示的数字的例子:0.5 和 -7.8237591...

  • 控件——SeekBar

    SeekBar是一个表示进度的控件。使用非常广泛,在xml中定义时有很多属性。 简介: SeekBar控件在xml...

  • Python基础知识点拾遗

    浮点数 系统浮点数信息 1.完整信息 显示结果为: 2.浮点数能表示的最大值 3.浮点数能表示的最近接0的值 4....

  • JavaScipt之基本概念(3)

    Number类型 这种类型使用IEEE754 格式来表示整数和浮点数值(浮点数值在某些语言中也被称为双精度数值)。...

  • Swift 数据类型之浮点数、类型别名

    浮点数:Float、Double Double 表示64位浮点数。当你需要存储很大或者很高精度的浮点数时请使用此类...

  • TensorFlow基础知识

    1 综述 TensorFlow的编程系统中: 使用张量(tensor)来表示数据 使用图(graph)来表示计算任...

  • python数据清洗与准备

    7.1处理缺失值 对于数值型数据,pandas使用浮点数NaN(not a number 来表示缺失值)。我们称N...

网友评论

    本文标题:使用系统 Seekbar 来表示浮点数

    本文链接:https://www.haomeiwen.com/subject/wwafixtx.html