Android onGestureListener和onTouchListener

时间:2012-03-15 12:32:14

标签: android

我在android工作。我有一些功能可以通过以下方法完成: -

1. MotionEvent.ACTION_DOWN
2. MotionEvent.ACTION_UP
3. MotionEvent.ACTION_MOVE

我还希望对该图片进行fling()

对于上述要求,我在我的应用程序中实现了onGestureListeneronTouchListener,但这些都无法正常工作。 onTouchListener正在运行,但onGestureListener无效。当我删除onTouchListner代码时,onGestureListener工作正常。

所以请建议我该怎么做。我想在我的应用程序中实现这四种方法。

1. MotionEvent.ACTION_DOWN
2. MotionEvent.ACTION_UP
3. MotionEvent.ACTION_MOVE
4. onFling

2 个答案:

答案 0 :(得分:7)

您可以通过实施覆盖以下方法的活动中的OnGestureListener来实现此目的

// For touch 
public boolean onSingleTapUp(MotionEvent event) { return false; }

// For Fling 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
        float velocityY) {
    return false;
}

希望这有帮助。


编辑1 :详细说明:

1>从您的活动中实施OnGestureListener

public class MyActivity implements OnGestureListener

2 - ;创建一个GestureDetector实例:

private GestureDetector gestureScanner;

onCreate

// Avoid a deprecated constructor 
// (http://developer.android.com/reference/android/view/GestureDetector.html)
gestureScanner = new GestureDetector(this, this);

3>覆盖以下方法:

@Override
public boolean onTouchEvent(MotionEvent event) {
    return gestureScanner.onTouchEvent(event);
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
        float velocityY) {
    /* on scroll to the next page in story */

    if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
            && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
        // ...
    }
    /* on scroll to the previous page in story */
    else if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
            && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
        // ...
    }

    return false;
}

@Override
public boolean onSingleTapUp(MotionEvent event) {
    return false;
}

编辑2 :用于处理移动 覆盖onScroll方法可以查看详细信息here

答案 1 :(得分:0)

就像来自Android开发人员的建议一样,他们已经追逐了刷卡或fling事件的报告路径......当写一个监听器或尝试实现OnGestureListener类时,一定要 {导入中的{1}}

否则import android.view.GestureDetector.OnGestureListener将使用GestureOverlayView的导入,而这似乎不是你想要的。这些有用,特别是在尝试使用Gestures应用程序实现手势捕获并导入保存的手势并在运行时为您的应用程序创建手势库,然后通过在后台运行一些奇特的算法来“预测”用户正在做什么谁偏离了用户的输入。事实证明,这是一系列来自操作系统的位置,因为他们将小粗短的手指拖过平面屏幕......这是一种不同的方法,而不仅仅是尝试捕捉甩动或长按。这似乎是用户在上面寻找的东西,而不是一些花哨的多按手势捕捉,这种方法非常简单。这种技术在视频游戏中也非常有用,并且可能为那些喜欢开发游戏的人提供“后门”。或者在9-5世界中,将支持或管理后门放入您的移动应用程序以隐藏日常用户的某些设置或日志。其中一个人也可以使用上述预期的技术,但是你必须在屏幕上获得一系列点或位置,这对于任何非数学人或自学成才的开发人员来说都是乏味的。希望我贡献或帮助任何人。当我学习这个时,没有人向我提起过这个问题,而且我从未在我读过的有关Android的几本书中找到它。