情景
功能按钮其他设备都可以,唯独 三星S9 点击没反应;
源码分析
定位位置,程序执行逻辑 -> 通过if判断去执行功能的,也就是说判断有问题;
好!我们看一下判断哪里出了问题
画图分析
通过UML序列图大概了解到,ACTION_UP 抬起后,计算了坐标点的位置,之后Math.abs(ex)获取值,判断程序逻辑
仔细看,这里他拿到的绝对值是 float类型的,也就是说三星设备拿到的绝对值 是 float类型,为什么呢?
Math.abs源代码分析
- 译
返回的绝对值int值。 如果参数不是负数,则返回该参数。 如果参数为负数,则返回该参数的否定。 请注意,如果参数等于值Integer.MIN_VALUE ,最负表示的int值,结果是相同的值,且为负。 PARAMS: 一个 - 其绝对值是确定的说法 返回: 参数的绝对值。
返回的绝对的int值…可是并没有返回int值呀!这个可能跟我本地api有关系,我是用的是 targeSdkVersion-> 26.0.2,是17年7月份的,不得不怀疑跟这个有关,研究一下,写个demo
demo测试也是一样,获取到的也是float类型,肯定有些地方有问题;
解决方案
1.强转为 int 类型,这样获取到的值就是int类型了;
2.更改判断逻辑;
由于项目比较老,强转为Int类型就可以了;