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