让onFling和onScroll分别触发

5

我正在尝试编写一个程序来检测和处理手势。我成功地让onFling和onScroll事件工作起来了(这些事件是在Activity内部的listener类中实现的)。然而,每次我进行滑动(onFling),onScroll()函数内部的代码也会被执行。例如:

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
{
    //do something here, for example change background color to red
    return true;
}

@Override
public boolean onScroll (MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
{
    //do something, for example vibrate
    return true;                 
}

在这种情况下,当我滚动设备时它会震动,这没问题。但是当我进行滑动并执行onFling时,颜色会变成红色,但是它也会震动,而我不想要这个震动效果。
有没有办法防止这种情况发生,使得只有在发生滑动时才触发onScroll()事件,在onFling()事件中只执行相应的代码,或者在处理简单的手指移动和滑动手势时将其分别处理?
编辑:我正在使用GestureDetector类。

你解决了吗?我也遇到了类似的问题。 - 2cupsOfTech
你找到任何解决方案了吗? - Nouman Bhatti
1个回答

0

我猜你正在使用GestureDetector

如果在滚动发生之前发生了快速滑动,那么就不会发生快速滑动,这就是为什么你会在onFling(...)之前收到一个onScroll(...)回调的原因。当用户将手指从屏幕上抬起(ACTION_UP)并且产生足够的速度时,就会调用onFling(...)


是的,我正在使用GestureDetector。所以onScroll()将始终被调用,因为它包含ACTION_MOVE事件,这个事件也会在onFling()中发生吗? - holparb
onFling() 应该只在 ACTION_UP 上调用。 - Chris Banes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接