NestedScrollingChild和NestedScrollingParent

NestedScrollingChild和NestedScrollingParent

记录在学习嵌套滑动中遇到的接口和使用方法。


滑动动作是 Child 主动发起,Parent 就收滑动回调并作出响应。
NestedScrollingChild接口的实现,基本上就是调用 Helper(NestedScrollingChildHelper) 类的对应的函数即可,因为 Helper 类中已经实现好了 Child 和 Parent 交互的逻辑。

准备工作:
当Child要滑动的时候,调用startNestedScroll()方法,通过Helper去通知Parent,此时Parent调用了onStartNestedScroll(),并返回true同意Child一同滑动的请求。随后,Parent调用onNestedScrollAccepted(),来做接受滑动且滑动之前的准备工作,可以直接使用Helper(NestedScrollingParentHelper)类帮我们做处理。

滑动:
每次滑动前,Child首先调用dispatchNestedPreScroll()方法来询问Parent是否需要先于Child滑动,与之对应的是Parent的onNestedPreScroll()方法,在这个方法中,Parent可以做处理,拦截Child自身的滑动,并先于Child滑动。
如果Parent不需要先于Child滑动,Child继续调用dispatchNestedScroll(),对应到Parent的onNestedScroll()方法,这时Parent是在Child滑动并处理完事情后再做处理。
上面两种处理方法都是通过Parent消费滑动距离来处理滑动事件,即给[]consumed赋值,该值是Parent滑动的距离,consumed[0]是x轴,consumed[1]是y轴。
滑动结束后,Parent调用onStopNestedScroll()结束本次滑动。

滑行:
原理和滑动差不多,在滑行之前,Child调用dispatchNestedPreFling(),并通过Helper通知Parent要滑行了,询问Parent要不要在onNestedPreFling()中先行处理Fling事件。

**补充笔记
RecyclerView获取滑动距离
只限于使用LinearLayoutManager的时候

public int getScollYDistance() {  
    LinearLayoutManager layoutManager = (LinearLayoutManager) this.getLayoutManager();  
    int position = layoutManager.findFirstVisibleItemPosition();  
    View firstVisiableChildView = layoutManager.findViewByPosition(position);  
    int itemHeight = firstVisiableChildView.getHeight();  
    return (position) * itemHeight - firstVisiableChildView.getTop();  
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值