【问题标题】:Implementing onTouchListener and onGestureLitener simultaneously同时实现 onTouchListener 和 onGestureLitener
【发布时间】:2013-11-19 13:01:46
【问题描述】:

我正面临一种情况。

我已经编写了一个实现 onTouchListener 的类,我已经在 view(GLSurfaceView,准确地说) 中注册了它,我用它来提取所有 有关触摸事件的信息。它对我很有帮助。并实现 onTouch 方法意味着事件在当时和那里被处理并且它不会向下传播。

但最近我需要为我的游戏实现滑动功能。它需要我实施 onTouchEvent 我的观点。但是由于我的 onTouchListener 实现类已经实现了 onTouch 方法,所以不会调用 onTouchEvent。我想保留我的 onTouchListener 实现。 请告诉我如何解决这个问题。

马尼什

【问题讨论】:

    标签: android


    【解决方案1】:

    在你的课堂上输入以下内容:

    //not necessarily OnCreate but put it in whatever constructor your class uses
    OnCreate(Context context){
        mGestureDetector = new GestureDetector(context, new CustomGestureListener());
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        mGestureDetector.onTouchEvent(event);
        return super.onTouchEvent(event);
    }
    
    private final GestureDetector mGestureDetector;
    
    private class CustomGestureListener extends SimpleOnGestureListener {
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            //get the fling    
        }
    }
    

    这允许 onTouchEvent 执行,但它也通过调用 onTouchEvent 中的手势检测器来检查手势事件。

    另请参阅此答案:How to set OnTouchListener for the entire screen?

    【讨论】:

    • 感谢您的快速回复。所以你的意思是我需要把上面的代码放在实现 onTouchListener 的类中。
    • @user2444661 是的,这就是我的意思,因为你在自定义 GLSurfaceView 类中有你的触摸监听器,把这段代码放在那里。请记住将我在 OnCreate 中的代码放在表面视图的构造函数中(我在具有 OnCreate 的活动中使用此代码)。如果它适合您,请不要忘记将其标记为答案。
    • 嗨...实际上我的触摸监听器代码不在自定义 GLSurfaceView 类中。我有另一个用于实现 onTouchListener 的类。现在我想实现 onGestureListener。
    • 然后把上面的代码放在你有onTouchListener的类里,把onTouchEvent代码放在你的onTouchListener里,把onCreate代码放在那个类的构造函数里。另外,我在答案中添加了一个链接,该链接指向另一个应该对您有所帮助的类似问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2022-01-11
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多