Android - ScrollView пропускает вертикальный жест пальца после короткого расстояния - PullRequest
0 голосов
/ 08 августа 2011

У меня есть класс, который расширяет 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 печатает «движется», пока мой палец двигается по экрану. Но когда представление находится внутри ScrollView, и я двигаю пальцем по вертикали, LogCat печатает некоторое «движение», после пары миллиметров «отмена», а затем ничего больше, пока я не заменю свой палец на экране. Этого не происходит, когда я двигаюсь горизонтально.

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

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

Благодарю вас в ожидании

Даниэль Р.

Ответы [ 2 ]

2 голосов
/ 08 августа 2011

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

например:

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

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

0 голосов
/ 08 августа 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...