我正在努力实施投掷。问题是我只有当X在偏移0上时才会得到它(这意味着在屏幕的边缘)。当我试图在屏幕中间晃动时没有任何反应。这只发生在X.Y表现良好。 这是代码:
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
try {
if ((e1.getY() < CARD_POSITION) && (e2.getY() < CARD_POSITION)
&& (Math.abs(e1.getX() - e2.getX()) >SWIPE_MIN_DISTANCE )
) {
Log.v("Fling:",Double.toString(e1.getX()));
return true;
} else {
return false;
}
} catch (Exception e) {
return false;
}
}
答案 0 :(得分:0)
我过去曾遇到过类似的问题。最后,我在比较x位置与我使用的最小距离阈值时的数学错误。根据你所描述的结合发布的代码,听起来好像x方向投掷不起作用因为x1和x2之间的不同,在应用绝对值之后,并不是出乎你的想法。
从0偏移,滑动整个屏幕,你可以注册一个fing,因为在这么远的距离,2个值之间的差异足以触发你的阈值。但是从屏幕中间开始,比如x1 = 400和x2 =注册移动事件时,你没有触发那个阈值。
对我有用的是消除绝对值
public boolean onFling(MovtionEvent e1, MotionEvent e2, float velocityX, float velocityY){
if(e2.getX() - e1.getX() > MIN_SWIPE_DISTANCE && Math.abs(velocityX)){
Log.d("Swipe", "Left to right")
return true;
} else if (e2.getX() - e1.getX() > MIN_SWIPE_DISTANCE && Math.abs(velocityX)){
Log.d("Swipe", "Right to Left")
return true;
}
我的推理基于描述e1和e2代表的GestureDetector文档:
e1开始滚动的第一个向下运动事件。
e2 移动触发当前onFling的动作事件。
错误结果是假设相对于来自e2的ACTION_DOWN
发生的初始ACTION_MOVE