У меня есть класс, который расширяет 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
?
Благодарим вас заранее
Дэниел Р.