你在左右滑动时,如果手指不是完全水平,稍微倾斜的话,y方向移动达到一定像素就会触发(这个值可以用ViewConfigration类取得,通常是8像素)scrollView的onInterceptTouchEvent,它返回true,于是你的左右滑动停止,开始了scroll的上下滚动。
解决方法可以考虑这样:
写一个scrollview的子类,重载onInterceptTouchEvent方法:
逻辑如下:
如果事件是ACTION_DOWN,使用成员x 和 y记录:
如果是move:
boolean value = super.onInterceptTouchEvent(event);
if(value)
{
float deltax = event.getX() - x;
float deltay = event.getY() - y;
if( deltay 绝对值 > deltax绝对值)//说明确实是上下滑动的
{
return true;
}
}
return false;
注意无论Action是什么,都要调用super.onInterceptTouchEvent
否则的话,scrollview接收不到DOWN事件,是不会开始滚动的。