Android 水平投掷仅在偏移量0时开始

Android 水平投掷仅在偏移量0时开始,android,gestures,onfling,Android,Gestures,Onfling,我正在努力实现fling。问题是,只有当X位于偏移量0(这意味着在屏幕边缘)时,我才能得到它。当我试着在屏幕中间飞舞时,什么也没有发生。这只发生在X上。Y的行为正常。 代码如下: public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { try { if ((e1.getY() < CARD_POSITION) &&a

我正在努力实现fling。问题是,只有当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;
    }

}
public boolean onFling(运动事件e1、运动事件e2、浮点速度X、,
浮动速度y){
试一试{
if((e1.getY()滑动距离)
) {
Log.v(“Fling:”,Double.toString(e1.getX());
返回true;
}否则{
返回false;
}
}捕获(例外e){
返回false;
}
}

我过去也遇到过类似的问题。结果是,在我如何将x位置与我使用的最小距离阈值进行比较的数学计算中出现了错误。根据您所描述的内容以及所发布的代码,听起来似乎x方向抛投不起作用,因为在应用绝对值后,x1和x2之间的差异并没有达到您的想法

从0偏移量开始,在整个屏幕上滑动,您可以注册一个fing,因为距离这么远,两个值之间的差异足以触发阈值。但是从屏幕中间看,比如x1=400和x2=where移动事件被注册,您并没有触发该阈值

对我有效的是去除绝对值

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所代表内容的文档:

e1开始滚动的第一个向下运动事件。
e2 触发当前启动的移动运动事件

该错误被证明是一种假设,即相对于e2的
动作
发生了e1初始
动作