SimpleOnGestureListener не работает для ScrollView

У меня есть экран, где у меня есть заголовок, TextView внутри ScrollView и нижний колонтитул. Я должен использовать ScrollView, поскольку текст в TextView также может быть длинным.

Теперь, когда я использую SimpleOnGestureListener для этого экрана. Он не работает для раздела ScrollView. Удаление ScrollView все работает нормально. Но в случае длинного текста часть текста пропускается.

Я хочу использовать onFling и onDoubleTap в SimpleOnGestureListener.

Пожалуйста, порекомендуйте.

С уважением, Шанкар


person Bhabani Shankar    schedule 21.08.2011    source источник


Ответы (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);
        }
    }

Дайте мне знать, если у вас возникнут какие-либо проблемы. :)

-Зайд

person Zaid Daghestani    schedule 21.08.2011
comment
Спасибо за ответ. Но как бы я передал свой GestureDetector этому пользовательскому классу ScrollView. - person Bhabani Shankar; 21.08.2011
comment
Вы можете сделать GestureDetector глобальной переменной или добавить еще один конструктор с GestureDetector в качестве аргумента и локальной переменной. Я отредактировал код, чтобы показать, как сделать другой конструктор. - person Zaid Daghestani; 21.08.2011
comment
Спасибо . Обнаружение исключения nullpointerException в методе onTouchEvent для объекта myGesture. Я передаю объект жеста следующим образом из своего класса Activity: жестListener = новый View.OnTouchListener () { public boolean onTouch (View v, событие MotionEvent) { if (gestureDetector.onTouchEvent (событие)) { return true; } вернуть ложь; } }; scrollV = новый GestureScrollView (getApplicationContext (), жестДетектор); пожалуйста, порекомендуйте - person Bhabani Shankar; 21.08.2011
comment
Попробуйте жестДетектор = новый GestureDetector(gestureListener); - person Zaid Daghestani; 22.08.2011
comment
Эй, еще раз спасибо за ответ. Тем не менее, я не могу решить проблему. Не могли бы вы дать мне свой почтовый идентификатор, чтобы я мог отправить вам проект. Наверное, я что-то упускаю в коде. - person Bhabani Shankar; 22.08.2011
comment
я тоже получаю NullPointerException. Кто-нибудь смог решить это? - person Piyush-Ask Any Difference; 22.07.2013

Я получил решение для этой проблемы

Добавьте следующий метод в свой класс 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

person Bhabani Shankar    schedule 23.08.2011
comment
Гораздо проще, чем возиться с реализацией ScrollView, спасибо, чувак! - person animaonline; 10.02.2013