Android关于SeekBar无法点击到最大值问题解决方法记录(推荐)

 更新时间:2019年04月12日 14:10:32   作者:赤色荆棘  
这篇文章主要介绍了Android关于SeekBar无法点击到最大值问题解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

先说一下问题发现经过吧,最近项目定制系统设置应用,其中亮度条一开始是0-255值变化,使用了SeekBar控件去调节,后来需求变更将值划分为10个等级,也就是进度条的max为9,可以说一下子进度条从0-255变成了0-9范围缩小了很多,范围缩小,控件没有变,也就是每个进度点到下一个进度点的距离就变长了,众所周知,SeekBar是支持拖动以及点击两种方式控制,在我无聊瞎点时发现,我怎么点,这个进度条都无法通过点击跳到最大值,瞬间也就从划水模式变成认真模式=_=||。顺便也就写下来记录一下,防止以后忘记。

经过分析,其实问题原因也大概是这样的,SeekBar的进度大家都知道返回是一个int的整形,那么这个整形怎么取呢?这里也不细说各种判定,简略说也就和我们平时计算一个线段平均分N段一样,那么也就是每个进度点都有一段范围长的,如上面我的范围是0-9取值其实是10个数,10个值所以我们进度条肯定是将线段长度分成9段[一条线段是有两个端点,取n个值就划分成n-1段],那么也相当于一个蛋糕只切了9份,那么最后肯定有一个数字分不到范围,所以假设我们控件长度是90,分0-9,,那么其实取给0的范围是[0,10)这么一个集合,以此类推1的范围则是[10,20)...略,所以分到最后也就最大值9没分到范围,这里说的是范围,因为点击时,是看点击范围在哪里然后给他移动到代表那个范围的点,那么9到底在哪里呢?其实9也算有范围,咳咳,打脸自己,其实9的范围就是[90],没错,最大值,你只能取最后满足它100%的数。所以不是点不到,而是这个点太难点到了。唉--平时话少,也不知道解释得到位不到位,若还是不懂,可以自己实际用一个SeekBar把控件长度定大一点,取值的max定小一点,然后自己体会一下吧= =!

那么为啥我们拖动可以到最大值呢?其实这个很好解释,因为拖动时控件处理MOVE事件,大家应该知道控件touch事件,你要抬起手这个焦点才会被释放,所以我们一直拖,控件都会处理这个事件,而能到最大值原因是我们实际是拖到了或者超过最大值位置的点那么此时通过一系列计算判定也就跑到了最大值去了

说完原因,那么接下来就说一下解决方法吧,刚刚说了,最大值的判定范围太小了,那么思路就是扩充最大值的判定范围不就可以了么?

方法一:我们都知道控件除了本身实际长度外,其实还有很多额外的量,如android:layout_marginXXX, android:paddingXXX,但是margin并不会计算在控件内部范围,但是padding就不一样,所以我们可以通过增加padding从而增加点击范围,从而使得最大值的判定范围增大。如增加个android:paddingRight="20dp" 我目前用的是这种

方法二:原理同上,不过是通过setTouchDelegate方法去增大触控范围,具体这个方法使用方式和局限性大家可以自己百度[我就是这么懒=_=|]

方法三:还有一种方法那就是自己重新处理相关touch事件,修改范围判定算法,把蛋糕重新切一下,如把8的判定改成是[80,85)那么剩下的就分给9之类的,这算是一个最好的解决方法,也是最麻烦的[所以我懒,也没去做],仅提供思路。

以上所述是小编给大家介绍的Android关于SeekBar无法点击到最大值问题解决方法详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Android实现ListView分页自动加载数据的方法

    Android实现ListView分页自动加载数据的方法

    这篇文章主要介绍了Android实现ListView分页自动加载数据的方法,涉及Android生成listview列表的相关技巧,需要的朋友可以参考下
    2015-12-12
  • 基于Android实现百度地图定位过程详解

    基于Android实现百度地图定位过程详解

    这篇文章主要介绍了基于Android实现百度地图定位过程详解,需要的朋友可以参考下
    2015-11-11
  • Android-App增量更新的使用姿势

    Android-App增量更新的使用姿势

    增量更新根据字面理解就是下载增加的那部分来达到更新的目获取旧的Apk安装包的签名和已合并成新的Apk安装包的签名,对比签名是否一致当你下载差异文件时,可以让服务器给你返回新的Apk合并成功后文件的md5,当你合并成功后,通过校验文件的md5值,达到校验文件完整性。
    2016-04-04
  • android编程实现图片库的封装方法

    android编程实现图片库的封装方法

    这篇文章主要介绍了android编程实现图片库的封装方法,涉及Android针对图片的下载、保存、获取及操作缓存图片等相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • Android支付宝和微信支付集成

    Android支付宝和微信支付集成

    这篇文章主要为大家详细介绍了Android支付宝和微信支付集成的相关资料,需要的朋友可以参考下
    2016-07-07
  • Android App开发中创建Fragment组件的教程

    Android App开发中创建Fragment组件的教程

    这篇文章主要介绍了Android App开发中创建Fragment的教程,Fragment是用以更灵活地构建多屏幕界面的可UI组件,需要的朋友可以参考下
    2016-05-05
  • Android自定义ViewGroup之FlowLayout(三)

    Android自定义ViewGroup之FlowLayout(三)

    这篇文章主要为大家详细介绍了Android自定义ViewGroup之FlowLayout,常用于关键字标签,搜索热词列表等功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • 基于Flutter制作一个心碎动画特效

    基于Flutter制作一个心碎动画特效

    这篇文章主要为大家介绍了如何利用Flutter制作一个心碎动画特效,文中的示例代码讲解详细,对我们学习Flutter有一定帮助,感兴趣的可以了解一下
    2022-04-04
  • Android入门之Activity间互相传值详解

    Android入门之Activity间互相传值详解

    我们在之前的Service篇章中看到了一种putExtras和getExtras来进行activity与service间的传值。而恰恰这种传值其实也是Android里的通用传值法。它同样可以适用在activity与activity间传值,本文就来和大家详细讲讲
    2022-12-12
  • Android编程使用AlarmManager设置闹钟的方法

    Android编程使用AlarmManager设置闹钟的方法

    这篇文章主要介绍了Android编程使用AlarmManager设置闹钟的方法,结合具体实例分析了Android基于AlarmManager实现闹钟功能的设置、取消、显示等相关操作技巧,需要的朋友可以参考下
    2017-03-03

最新评论