自定义Behavior 一般可以重写这些方法
onInterceptTouchEvent()
:是否拦截触摸事件onTouchEvent()
:处理触摸事件layoutDependsOn()
:确定使用Behavior
的View
要依赖的View
的类型onDependentViewChanged()
:当被依赖的View
状态改变时回调onDependentViewRemoved()
:当被依赖的View
移除时回调onMeasureChild()
:测量使用Behavior
的View
尺寸onLayoutChild()
:确定使用Behavior
的View
位置onStartNestedScroll()
:嵌套滑动开始(ACTION_DOWN
),确定Behavior
是否要监听此次事件onStopNestedScroll()
:嵌套滑动结束(ACTION_UP
或ACTION_CANCEL
)onNestedScroll()
:嵌套滑动进行中,要监听的子View
的滑动事件已经被消费onNestedPreScroll()
:嵌套滑动进行中,要监听的子View
将要滑动,滑动事件即将被消费(但最终被谁消费,可以通过代码控制)onNestedFling()
:要监听的子View
在快速滑动中onNestedPreFling()
:要监听的子View
即将快速滑动
一般我们定义一个behavior 像下面这样
public class MyBehavior extends CoordinatorLayout.Behavior<View> { public MyBehavior() { } public MyBehavior(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) { return super.layoutDependsOn(parent, child, dependency); } @Override public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) { return super.onDependentViewChanged(parent, child, dependency); } }
其中两个构造参数一定要写,
layoutDependsOn()方法表示我们要依赖的View
onDependentViewCHanaged()表示监听的View 变化的时候 去变化依赖他的View
其中CoordinatorLayout parent 表示最外面的CoordinatorLayout
View child 表示添加这个behavior的View
View dependency 表示监听的那个View
然后我们把这个写在String.xml里面,用的时候在布局xml控件里添加@String/就行了