Android应用上的Math.min问题

时间:2017-01-12 12:57:25

标签: java android

我正在追踪一个问题,导致我的应用在拖动屏幕上的触摸时出现一些闪烁。

这个问题似乎与Math.min在某些情况下没有返回正确的结果有关。

mPointerPos.mPos.x = Math.min(mPointerPos.mPos.x, 0.9f * mDragStartPos.x);

我通过条件语句更改了函数调用,但问题仍然存在。

float min = 0.9f * mDragStartPos.x;
Log.w("!", "" + mPointerPos.mPos.x + " " + min);
mPointerPos.mPos.x = mPointerPos.mPos.x < min ? mPointerPos.mPos.x : min;
Log.w("!\t->", "" + mPointerPos.mPos.x);

输出结果为:

01-12 08:36:34.133 26229-26229 W/!: -0.3032546
01-12 08:36:34.134 26229-26229 W/!: -0.3032546 -1.4999999
01-12 08:36:34.134 26229-26229 W/!  ->: -1.4999999
01-12 08:36:34.147 26229-26229 W/!: -0.2417283
01-12 08:36:34.148 26229-26229 W/!: -0.2417283 -1.4999999
01-12 08:36:34.152 26229-26229 W/!  ->: -1.5933207
01-12 08:36:34.158 26229-26229 W/!: -0.19270718
01-12 08:36:34.159 26229-26229 W/!: -0.19270718 -1.4999999
01-12 08:36:34.159 26229-26229 W/!  ->: -1.4999999

在第6行,我期待看到-1.4999999,即-0.2417283和-1.4999999之间的最小值,而不是我得到-1.5933207

有什么我想念的吗? mPointerPos.mPosmDragStartPos的类型为android.graphics.PointF

1 个答案:

答案 0 :(得分:1)

mPointerPos显然是由其他一些线程在两行之间更新的。 mPointerPos如何更新?这段代码在哪里执行?回答这些问题可能会为您提供问题的答案(可能只是在双方添加同步块......或者重写该部分程序的整个逻辑)。