Android - ScrollView пропускает вертикальный жест пальцем после небольшого расстояния

У меня есть класс, который расширяет EditText и перезаписывает метод onTouchEvent(), чтобы увидеть, когда происходят соответствующие MotionEvents:

public class CustomEditText extends EditText {
    public CustomEditText(Context context) {
        super(context);
    }
    public CustomEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public CustomEditText(Context context, AttributeSet attrs, int i) {
        super(context, attrs, i);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch(event.getAction()) {
        case MotionEvent.ACTION_DOWN: Log.v("ME", "down");
        break;
        case MotionEvent.ACTION_UP: Log.v("ME", "up");
        break;
        case MotionEvent.ACTION_MOVE: Log.v("ME", "move");
        break;
        case MotionEvent.ACTION_CANCEL: Log.v("ME", "cancel");
        break;
        }
        return true;
    }
}

Когда представление не находится внутри ScrollView, все работает так, как ожидалось: LogCat печатает «перемещение», пока мой палец перемещается по экрану. Но когда View находится внутри ScrollView и я двигаю пальцем по вертикали, LogCat печатает какое-то «движение», через пару миллиметров «отмена», а затем ничего, пока я не верну палец на экран. Этого не происходит, когда я двигаюсь горизонтально.

Я думаю, причина в том, что в этот момент ScrollView распознает, что он должен начать прокрутку сейчас, и, следовательно, «крадет» MotionEvents из представления, чтобы оценить их самостоятельно.

Теперь мой вопрос: как я могу запретить такое поведение, не создавая новый класс, расширяющий ScrollView?

Благодарим вас заранее

Дэниел Р.


person DanielR.    schedule 07.08.2011    source источник


Ответы (2)


Почему бы вам попробовать setOnTouchListener

ex:

ScrollView yourScrollView;
yourScrollView.setOnTouchListener(new View.OnTouchListener(){
    public boolean  onTouch  (View v, MotionEvent event){
        yourTextView.onTouch(yourTextView,event);
    }
});

что-то в этих строках .. пожалуйста, сообщите, чтобы я мог отредактировать ответ на лучший

person Sherif elKhatib    schedule 07.08.2011

(Это я, DanielR. Теперь у меня есть собственный аккаунт, извините за это.)

Большое спасибо за быстрый ответ, Шериф. Это решает мою проблему.
Что я на самом деле делаю в своем приложении, так это просматриваю прокручиваемый EditText, который имеет 3 области: небольшое поле слева и справа, в котором вы можете прокручивать представление, и основную область в центре, в которой общие действия редактирования выполняются. Что я делаю для этого:
1. когда пользователь начинает жест на полях, я устанавливаю для onTouchListener значение null, поэтому выполняется действие прокрутки ScrollView (прочитайте это в сообщении где-то здесь).
2. касаясь основной области, onTouchListener устанавливается на тот, который вы предложили выше, поэтому прокрутка отключена, И все сенсорные события достигают EditText. Раньше мой onTouchListener был пуст, поэтому простая прокрутка была запрещена. Не знаю, почему я сам этого не видел. Я думаю, что уже слишком поздно ;)

Еще раз большое спасибо.

person m1ntf4n    schedule 08.08.2011
comment
Вы должны принять пост Шерифа в качестве ответа, если он решил вашу проблему. - person Austin Hanson; 08.08.2011
comment
Я бы так и сделал, но, как я уже писал выше, аккаунт моего посетителя, которому я задавал этот вопрос, исчез. Мне очень жаль. - person m1ntf4n; 08.08.2011