问题描述

logcat

你是否也遇见过这样的情况,SeekBar的进度不连续

这是我在做一个编辑图片的APP时,观察我打印的log,发现progress不是连续的

这时候可能就有人问:是你代码写的不对吧,老哥

贴出代码

public class MySeekBar extends AppCompatSeekBar {
String TAG = "MySeekBar";
private Context mContext;
public MySeekBar(Context context) {
super(context);
mContext = context;
init();
}
public MySeekBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mContext = context;
init();
}
public MySeekBar(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
init();
}
private void init() {
setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
Log.i(TAG, "onProgressChanged: " + seekBar.getProgress());
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
}

主要代码都在init()这个函数里面,其他的就是一些构造函数,传参

分析问题

那么为什么会发生这种事情呢??是不是断触了???还是手机屏幕判断不准了

直接说结论(这是我向一个大神请教的)

结论就是:Android SeekBar底层机制是16ms报告一次,也就是返回一次数据,也就是一秒62.5次,采样率就是62.5Hz

也就是说Android SeekBar的滑动虽然看起来是你设置的setMax()的数值,但是底层并不是实时监控的,其实,大多数,也可以说是全部的计算机系统(因为我还没有想出来反例)工作原理都是采样,而并非实时监控。只是Android的这个SeekBar采样率有点低,所以在我们快速滑动的时候, 就会出现这种progress(进度)不连续的现象。

而且,手机屏也是有采样率的,这个关注手机数码圈的肯定都知道,如果你手机采样率跟不上你单身20年的手速,就会出现操作不连贯的现象,例如王者荣耀、吃鸡、或者快速在屏幕上写字的时候,就会出现断触的现象,导致游戏失败,或字体奇怪(以后再有人说我菜,我就说是手机的问题,说我字丑也是手机的问题)

尝试解决问题

放弃 SeekBar 点击

方法一:强制慢划

你可以在 onProgressChanged 这个回调函数里面写一些逻辑,判断下一次 change 的 progress 是否连续,例如这样:

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
if(progress > oldProgress + 1 || progress < oldProgress - 1){
seekBar.setProgress(oldProgress);
return;
}
seekBar.setProgress(progress);
oldProgress = progress;
}

可以看到已经非常连贯了

但是这又会导致另外一个问题,那就是必须慢慢拖动才行,不跟手,稍微快一点就拉跨

其方法在持续探索中,敬请期待

SeekBar滑动时,progress数值不连续的更多相关文章

  1. 自己写的SeekBarPreference,可以实现seekbar滑动监听和设置默认进度和最大进度

    我通过参考android源码,把这个烂尾的类写完了.具体实现了seekbar的数据自动存储,seekbar拖动时触发监听器,可以设置默认的进度和最大进度.先说使用的方式: 1.在xml文件中使用pre ...

  2. gallery左右滑动时图片淡入淡出

    前几天,公司项目有一个功能要做成滑动图片的淡入淡出,要一边滑动一边改变,所以ViewFlipper左右滑动效果就不能了.网上找了很久,也找不到资料,所以自己写了一个,通过滑动改变imageView的透 ...

  3. ios 仿新浪微博 UINavigationController 向左滑动时显示上一个控制器的View.

    仿新浪微博 UINavigationController 向左滑动时显示上一个控制器的View. 实现原理,UINavigationController 的 self.view显示时把当前显示的vie ...

  4. [置顶] android ListView包含Checkbox滑动时状态改变

    题外话: 在xamarin android的开发中基本上所有人都会遇到这个小小的坎,的确有点麻烦,当时我也折腾了好一半天,如果你能看到这篇博客,说明你和我当初也是一样的焦灼,如果你想解决掉这个小小的坎 ...

  5. android listview优化:滑动时颜色错乱问题

      最近android的listview写多了,也学习了各种listview的优化,列如viewHolder的使用.今天做item颜色设置时遇到一个新的问题.我这里设置“未完成”是灰色的,“已完成”是 ...

  6. 解决iPhone滑动时滑到另一个层级导致卡顿问题

    问题概览: 两个div都可以滑动时,会造成滑动顶层div时,底层div也会跟着滑动.如图示. 解决方法: 添加CSS即可. 代码如下 * { -webkit-overflow-scrolling: t ...

  7. listView解决滑动时黑色背景问题

    listView.setCacheColorHint(Color.TRANSPARENT);//解决滑动时黑色背景问题 listView滑动时黑色背景问题 原因在于ListView存在缓存颜色机制,因 ...

  8. $ListView的优化机制和滑动时数据错乱的讨论

    Refer:http://www.myexception.cn/mobile/1612364.html (一)Android ListView的基本用法 1.创建一个实体类Person,为其添加Get ...

  9. 优化tableView性能(针对滑动时出现卡的现象)

    优化tableView性能(针对滑动时出现卡的现象) 在iOS应用中,UITableView应该是使用率最高的视图之一了.iPod.时钟.日历.备忘录.Mail.天气.照片.电话.短信. Safari ...

随机推荐

  1. nuxt.js使用scss

    1>安装一些loader npm i node-sass sass-loader scss-loader --save-dev 2>在nuxt.config.js中配置(需要全局使用的sc ...

  2. 数据可视化之powerBI基础(一) 如何查看PowerBI图表背后的数据

    https://zhuanlan.zhihu.com/p/64405494 图表很直观,但有时候我们不仅想看图,也想更进一步查看生成该图表的明细数据,在PowerBI中有三种方式. (一)在图表上单击 ...

  3. Python面向对象01 /面向对象初识、面向对象结构、类、self、实例化对象

    Python面向对象01 /面向对象初识.面向对象结构.类.self.实例化对象 目录 Python面向对象01 /面向对象初识.面向对象结构.类.self.实例化对象 1. 面向对象初识 2. 面向 ...

  4. redis未授权访问简单总结

    redis环境搭建 下载有漏洞的redis版本 wget http://download.redis.io/releases/redis-3.2.11.tar.gz 编译文件 make 进入src目录 ...

  5. 009.Nginx缓存及配置

    一 浏览器缓存 1.1 缓存概述 缓存对于Web至关重要,尤其对于大型高负载Web站点.Nginx缓存可作为性能优化的一个重要手段,可以极大减轻后端服务器的负载.通常对于静态资源,即较少经常更新的资源 ...

  6. 盘点JMeter不为人知那一些细节

    Jmeter工作原理 向服务器提交请求,并从服务器取回请求返回的结果.即建立一个线程池,多线程运行取样器产生大量负载,在运行过程中通过断言来验证结果的正确性,通过监听器来记录测试结果. 文章内容以Jm ...

  7. Burp Suite Intruder Module - 攻击模块

    参考链接:https://portswigger.net/burp/documentation/desktop/tools/intruder/using 主要思路:在Intruder模块下设定Targ ...

  8. CPU核数

    今天想看CPU核数,又忘记怎么看了QAQ. CPU的基本信息都被记录在/proc/cpuinfo中,一般直接cat /proc/cpuinfo就可以了. 主要是学习一下物理cpu核数/逻辑cpu核数的 ...

  9. 手把手教你安装Office 2019 for Mac ,安装包和破解码都给你准备好了,还装不上的话,你找我!

    准备一个安装包,和一个破解工具 ​ 安装MicrosoftOffice16.23.19030902_Installer.pkg, 注意在断网情况下安装 同时不要自动更新 , 安装好之后不要打开文件!​ ...

  10. Zabbix4.x如何安全传输数据

    由于设备都在混合云,所以不少数据传输是通过公网,这样极大的增加了危险性,所以在Zabbix数据传输这块则进行PSK安全认证,由proxy主动收集agent数据后统一发送给server,这样只需要对pr ...