问题描述

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;
}

可以看到已经非常连贯了

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

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

最新文章

  1. Difference between web server ,web container and application server
  2. Linux(CentOS 6.5)下配置Mono和Jexus并且部署ASP.NET MVC5
  3. Effective Java 37 Use marker interfaces to define types
  4. MySQL命令行查询乱码解决方法:
  5. Eclipse启动tomcat时报错:Multiple Contexts have a path of &quot;/xxx&quot;
  6. Error LNK2001 无法解析的外部符号 的几种情况及解决办法
  7. 静态Web开发 HTML
  8. Oracle Application Express (APEX 4.2) 中进行ajax调用
  9. busybox中tftp服务器使用命令
  10. Linux编程---I/O部分
  11. RaspberryPI 连接rs232模块接线图
  12. hibernate.dialect是干嘛用的?
  13. 练手——用Python写的时间戳转换为北京时间的小工具
  14. PHP中get请求中参数的key不能是para
  15. Katana的WebAPI集成Swagger 解决方案
  16. Tail Recusive
  17. windows server core 设置shell 及切换
  18. JAVA_连接池、DataSource、JNDI
  19. 2018.07.30 bzoj4355: Play with sequence(线段树)
  20. Ansible基本命令

热门文章

  1. day44 初识数据库
  2. vue + echart 实现中国地图 和 省市地图(可切换省份)
  3. 史上最全的 jmeter 获取 jdbc 数据使用的4种方法——(软件测试Python自动化)
  4. web测试中不容忽视的细节
  5. [日常摘要] -- zookeeper篇
  6. 七牛云如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器?
  7. MongoDB 事务,复制和分片的关系
  8. DJANGO-天天生鲜项目从0到1-015-部署-uWSGI+Nginx
  9. 随机生成姓名&amp;批量生成不重名
  10. 如何在CSDN博客开头处加上版权声明?