我有一个扩展 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;
}
}
当视图不在 aScrollView
中时,一切都按预期工作:只要我的手指在屏幕上移动,LogCat 就会打印“移动”。但是,当视图在 a 内ScrollView
并且我垂直移动手指时,LogCat 会打印一些“移动”,在几毫米后“取消”,然后什么都没有,直到我将手指放在屏幕上。当我水平移动时不会发生这种情况。
我认为原因是此时ScrollView
认识到它应该现在开始滚动并因此从视图中“窃取” MotionEvents 以便自行评估它们。
我现在的问题是:如何在不创建新类扩展的情况下禁止这种行为ScrollView
?
感谢你在期待
丹尼尔·R。