这种滚动冲突,我遇到的情况是WebView中加了一个网页,网页中有嵌套的滚动布局,导致嵌套滚动与SwipeRefreshView无法协调。
- 自定义WebView,重写
onTouchEvent
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
// 有些网页,上下滚动,getScrollY()恒为0, 推测是滚动事件被网页内布局捕获,所以网页内的布局内部滚动,网页大框架整体没有滚动;
// 所以针对这种情况,手动向上滚动1,那么getScrollY()会为1;
// 当向下滚动到达顶部时,即网页内布局内部的滚动到达顶部,事件不被内部捕获,被网页大框架捕获,会把向上滚动的1拉下来
// 个人理解(by jiangjh)
if(this.getScrollY() <= 0){
this.scrollTo(0,1);
}
break;
case MotionEvent.ACTION_UP:
break;
}
return super.onTouchEvent(event);
}
- 在调用处,设置
SwipeRefreshView
的OnChildScrollUpCallback
mSwipeRefreshView.setOnChildScrollUpCallback(new SwipeRefreshLayout.OnChildScrollUpCallback() {
@Override
public boolean canChildScrollUp(SwipeRefreshLayout parent, @Nullable View child) {
return child.getScrollY() > 0;
}
});
网友评论