情景

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

源码分析

定位位置,程序执行逻辑 -> 通过if判断去执行功能的,也就是说判断有问题;
好!我们看一下判断哪里出了问题
AndroiBug->SM-G9600 关于焦点触摸点击无反应问题分析

画图分析

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

通过UML序列图大概了解到,ACTION_UP 抬起后,计算了坐标点的位置,之后Math.abs(ex)获取值,判断程序逻辑
仔细看,这里他拿到的绝对值是 float类型的,也就是说三星设备拿到的绝对值 是 float类型,为什么呢?
AndroiBug->SM-G9600 关于焦点触摸点击无反应问题分析

Math.abs源代码分析

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

  • 返回的绝对值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 关于焦点触摸点击无反应问题分析

相关文章: