【问题标题】:SimpleOnGestureListener not working for ScrollViewSimpleOnGestureListener 不适用于 ScrollView
【发布时间】:2011-08-21 10:43:14
【问题描述】:

我有一个屏幕,其中有一个页眉、一个 ScrollView 内的 TextView 和一个页脚。我必须使用 ScrollView,因为 TextView 中的文本也可以很长。

现在,当我在此屏幕上使用 SimpleOnGestureListener 时。它不适用于 ScrollView 部分。删除 ScrollView 一切正常。但是对于长文本,有些文本会丢失。

我想在 SimpleOnGestureListener 中使用 onFling 和 onDoubleTap。

请指教。

问候, 尚卡尔

【问题讨论】:

    标签: android scrollview gesture


    【解决方案1】:

    我得到了这个问题的解决方案

    在您的 Activity 类中添加以下方法

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev){
        super.dispatchTouchEvent(ev);
        return gestureScanner.onTouchEvent(ev);
    } 
    

    如下链接所示:

    http://groups.google.com/group/android-developers/browse_thread/thread/9fdfb03d0959e299

    【讨论】:

    • 比搞乱 ScrollView 实现要容易得多,谢谢!
    【解决方案2】:

    您必须创建一个自定义 ScrollView 对象并覆盖它的 onTouchEvents 以检查您的手势。如下代码所示。

    public class GestureScrollView extends ScrollView {
        GestureDetector myGesture;
    
        public GestureScrollView(Context context, GestureDetector gest) {
            super(context);
            myGesture = gest;
        }
    
        public GestureScrollView(Context context) {
            super(context);
        }
    
        public GestureScrollView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent ev) {
            if (myGesture.onTouchEvent(ev))
                return true;
            else
                return super.onTouchEvent(ev);
        }
    
        @Override
        public boolean onInterceptTouchEvent(MotionEvent ev) {
            if (myGesture.onTouchEvent(ev))
                return true;
            else
                return super.onInterceptTouchEvent(ev);
            }
        }
    

    如果您遇到任何问题,请告诉我。 :)

    -扎伊德

    【讨论】:

    • 感谢您的回复。但是我如何将我的 GestureDetector 传递给这个自定义的 ScrollView 类。
    • 您可以将 GestureDetector 设为全局变量,也可以添加另一个构造函数,并将 GestureDetector 作为参数和局部变量。我编辑了代码以展示如何制作另一个构造函数。
    • 谢谢。在 myGesture 对象的 onTouchEvent 方法中遇到 nullpointerexception。我从我的 Activity 类中传递手势对象如下:gestureDetector = new GestureDetector(new MyGestureDetector()); gestureListener = new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { if (gestureDetector.onTouchEvent(event)) { return true; } 返回假; } }; scrollV = new GestureScrollView(getApplicationContext(),gestureDetector);请指教
    • 尝试gestureDetector = new GestureDetector(gestureListener);
    • 我也遇到了 NullPointerException。有人能解决这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    相关资源
    最近更新 更多