1.自定义Behavior
自定义Behavior可以重写的方法:
1.onInterceptTouchEvent() 是否拦截触摸事件
2.onTouchEvent() 处理触摸事件
3.layoutDependsOn 确定使用Behavior的View要依赖的Vie的类型
4.onDependentViewChanged() 当被依赖的View状态改变时回调
5.onDependentViewRemoved() 当被依赖的View移除时回调
6.onMeasureChild() 测量使用Behavior的View尺寸
7.onLayoutChild() 确定使用Behavior的View的位置
8.onStartNestedScroll() 嵌套滑动开始(ACTION_DOWN),确定Behavior是否监听此次事件
9.onStopNestedScroll() 嵌套滑动结束(ACTION_UP或者ACTION_CANCEL)
10.onNestedScroll() 嵌套滑动进行中,要监听子View的滑动事件已经被消费
11.onNestedPreScroll() 嵌套滑动进行中,要监听子View将要滑动,滑动事件即将被消费(但最终被谁消费,可以通过代码控制)
12.onNestedFling() 要监听的子View在快速滑动中
13.onNestedPreFling() 要监听的子View即将快速滑动
2.代码手动设置Behavior
CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) mRecyclerView.getLayoutParams();
lp.setBehavior(new SampleHeaderBehavior());
3.NestedScrolling机制
NestedScrolling提供了一套父View和子View嵌套滑动的交互机制,前提条件是父View需要实现NestedScrollingParent接口,子View需要实现NestedScrollingChild接口,按照NestedScrolling|parent|child接口的要求,实现该接口的View需要创建一个NestedScrolling|Parent|ChildHelper帮助类来辅助子类和父View的交互.在NestedScrolling机制中,当实现了NestedScrollChild接口的子View滑动时,先将自己滑动的dx,dy传递给NestedScrollingParent接口的父View,让View先决定是否要消耗相应的事件,父View可以消费全部事件,如果父View消费了部分,剩下的就给子View处理.
注:
拦截垂直方向的滚动事件
@Override
public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, View child, View directTargetChild, View target, int nestedScrollAxes) {
return (nestedScrollAxes & ViewCompat.SCROLL_AXIS_VERTICAL) != 0;
}
网友评论