水平Fling仅在偏移0处开始

时间:2013-05-24 14:46:19

标签: android gestures onfling

我正在努力实施投掷。问题是我只有当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;
    }

}

1 个答案:

答案 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