SeekBar滑动时,progress数值不连续
2024-09-05 23:09:43
问题描述
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;
}
可以看到已经非常连贯了
但是这又会导致另外一个问题,那就是必须慢慢拖动才行,不跟手,稍微快一点就拉跨
其方法在持续探索中,敬请期待
最新文章
- Difference between web server ,web container and application server
- Linux(CentOS 6.5)下配置Mono和Jexus并且部署ASP.NET MVC5
- Effective Java 37 Use marker interfaces to define types
- MySQL命令行查询乱码解决方法:
- Eclipse启动tomcat时报错:Multiple Contexts have a path of ";/xxx";
- Error LNK2001 无法解析的外部符号 的几种情况及解决办法
- 静态Web开发 HTML
- Oracle Application Express (APEX 4.2) 中进行ajax调用
- busybox中tftp服务器使用命令
- Linux编程---I/O部分
- RaspberryPI 连接rs232模块接线图
- hibernate.dialect是干嘛用的?
- 练手——用Python写的时间戳转换为北京时间的小工具
- PHP中get请求中参数的key不能是para
- Katana的WebAPI集成Swagger 解决方案
- Tail Recusive
- windows server core 设置shell 及切换
- JAVA_连接池、DataSource、JNDI
- 2018.07.30 bzoj4355: Play with sequence(线段树)
- Ansible基本命令
热门文章
- day44 初识数据库
- vue + echart 实现中国地图 和 省市地图(可切换省份)
- 史上最全的 jmeter 获取 jdbc 数据使用的4种方法——(软件测试Python自动化)
- web测试中不容忽视的细节
- [日常摘要] -- zookeeper篇
- 七牛云如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器?
- MongoDB 事务,复制和分片的关系
- DJANGO-天天生鲜项目从0到1-015-部署-uWSGI+Nginx
- 随机生成姓名&;批量生成不重名
- 如何在CSDN博客开头处加上版权声明?