0
点赞
收藏
分享

微信扫一扫

AndroiBug->SM-G9600 关于焦点触摸点击无反应问题分析


情景

功能按钮其他设备都可以,唯独 三星S9 点击没反应;

源码分析

定位位置,程序执行逻辑 -> 通过if判断去执行功能的,也就是说判断有问题;

好!我们看一下判断哪里出了问题

AndroiBug->SM-G9600 关于焦点触摸点击无反应问题分析_解决方案

画图分析

AndroiBug->SM-G9600 关于焦点触摸点击无反应问题分析_Math_02

通过UML序列图大概了解到,ACTION_UP 抬起后,计算了坐标点的位置,之后Math.abs(ex)获取值,判断程序逻辑

仔细看,这里他拿到的绝对值是 float类型的,也就是说三星设备拿到的绝对值 是 float类型,为什么呢?

AndroiBug->SM-G9600 关于焦点触摸点击无反应问题分析_源码分析_03

Math.abs源代码分析

AndroiBug->SM-G9600 关于焦点触摸点击无反应问题分析_Math_04

  • 译 ​​返回的绝对值int值。 如果参数不是负数,则返回该参数。 如果参数为负数,则返回该参数的否定。 请注意,如果参数等于值Integer.MIN_VALUE ,最负表示的int值,结果是相同的值,且为负。 PARAMS: 一个 - 其绝对值是确定的说法 返回: 参数的绝对值。​

返回的绝对的int值…可是并没有返回int值呀!这个可能跟我本地api有关系,我是用的是 targeSdkVersion-> 26.0.2,是17年7月份的,不得不怀疑跟这个有关,研究一下,写个demo

demo测试也是一样,获取到的也是float类型,肯定有些地方有问题;

解决方案

1.强转为 int 类型,这样获取到的值就是int类型了;

2.更改判断逻辑;

由于项目比较老,强转为Int类型就可以了;

AndroiBug->SM-G9600 关于焦点触摸点击无反应问题分析_源码分析_05


举报

相关推荐

0 条评论