這種滾動(dòng)沖突,我遇到的情況是WebView中加了一個(gè)網(wǎng)頁(yè),網(wǎng)頁(yè)中有嵌套的滾動(dòng)布局,導(dǎo)致嵌套滾動(dòng)與SwipeRefreshView無(wú)法協(xié)調(diào)。
- 自定義WebView,重寫(xiě)
onTouchEvent
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
// 有些網(wǎng)頁(yè),上下滾動(dòng),getScrollY()恒為0, 推測(cè)是滾動(dòng)事件被網(wǎng)頁(yè)內(nèi)布局捕獲,所以網(wǎng)頁(yè)內(nèi)的布局內(nèi)部滾動(dòng),網(wǎng)頁(yè)大框架整體沒(méi)有滾動(dòng);
// 所以針對(duì)這種情況,手動(dòng)向上滾動(dòng)1,那么getScrollY()會(huì)為1;
// 當(dāng)向下滾動(dòng)到達(dá)頂部時(shí),即網(wǎng)頁(yè)內(nèi)布局內(nèi)部的滾動(dòng)到達(dá)頂部,事件不被內(nèi)部捕獲,被網(wǎng)頁(yè)大框架捕獲,會(huì)把向上滾動(dòng)的1拉下來(lái)
// 個(gè)人理解(by jiangjh)
if(this.getScrollY() <= 0){
this.scrollTo(0,1);
}
break;
case MotionEvent.ACTION_UP:
break;
}
return super.onTouchEvent(event);
}
- 在調(diào)用處,設(shè)置
SwipeRefreshView的OnChildScrollUpCallback
mSwipeRefreshView.setOnChildScrollUpCallback(new SwipeRefreshLayout.OnChildScrollUpCallback() {
@Override
public boolean canChildScrollUp(SwipeRefreshLayout parent, @Nullable View child) {
return child.getScrollY() > 0;
}
});