http://www.eoeandroid.com/thread-258045-1-1.html
测试用机Nexus7,android版本4.2.2
当scrollview中放入的children(也可以是child的children)上设有click和longclick事件的时候,滑动无效5. 成功之后,手指再放到child上滑动:成功
简单总结一下, 操作中的事件拦截什么的流程完全正确,问题不在这里 当scrollview初始化在顶部或滚动到顶部的时候, 滑动无效 所以我讲每次加载后或滑动到顶部后 scrollTo(0, 1)问题解决了 |
----------forlong401--------------
子view的click和longclick和向下滚动冲突,二者只能有一个起作用。
4.2系统中,scrollview的onInterceptTouchEvent方法中,有一个判断:
/*
* Don't try to intercept touch if we can't scroll anyway.
*/
if (getScrollY() == 0 && !canScrollVertically(1)) {
return false;
}
所以要逃过这个判断就需要将Y坐标挪一下,或者后面的判断canScrollVertically为true。后面的这个判断可以通过下面的方式搞定:
/**
* Check if this view can be scrolled vertically in a certain direction.
*
* @param direction Negative to check scrolling up, positive to check scrolling down.
* @return true if this view can be scrolled in the specified direction, false otherwise.
*/
public boolean canScrollVertically(int direction) {
final int offset = computeVerticalScrollOffset();
final int range = computeVerticalScrollRange() - computeVerticalScrollExtent();
if (range == 0) return false;
if (direction < 0) {
return offset > 0;
} else {
return offset < range - 1;
}
}