CoordinatorLayout.Behavior学习

Behavior常用的方法

构造方法有两个:

1
2
3
默认:public Behavior() {}
布局:public Behavior(Context context, AttributeSet attrs) { }

两个构造方法也比较容易理解,一个是默认的空参的构造方法,一个是带有布局属性AttributeSet的方法,有了这个构造方法,可以直接在布局文件中使用


根据Behavior的特性,可以将内部的方法分以下类:

  • 测量与布局:
1
2
测量:public boolean onMeasureChild(){}
布局:public boolean onLayoutChild(){}
  • 特定状态:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//当Behavior添加到参数实例时,回调
public void onAttachedToLayoutParams(){}
//当Behavior与参数实例分离时,回调
public void onDetachedFromLayoutParams(){}
//当Behavior关联的对象想要定位到特定的矩形时,回调
public boolean onRequestChildRectangleOnScreen(){}
//当一个ChildView设置为回避属性时,回调
public boolean getInsetDodgeRect(){}
//当窗口发生改变时,回调
public WindowInsetsCompat onApplyWindowInsets(){}
//需要保存临时状态信息,回调
public Parcelable onSaveInstanceState(){}
//需要恢复临时状态信息,回调
public void onRestoreInstanceState(){}
//作用未知
public int getScrimColor(){}
//作用未知
public float getScrimOpacity(){}
  • 确定依赖与绑定对象:

    1
    2
    //根据参数来确定依赖与绑定对象
    public boolean layoutDependsOn(){}
  • 当依赖对象发生改变时:

1
2
3
4
5
//当依赖对象发生改变,包括位置,大小,颜色,进行回调
public boolean onDependentViewChanged(){}
//当依赖对象被移除时,进行回调
public void onDependentViewRemoved(){}
  • 事件相关:
1
2
3
4
5
//拦截事件,在CoordinatorLayout把事件分发到childView之前
public boolean onInterceptTouchEvent(){}
//消费事件
public boolean onTouchEvent(){}
  • 嵌套滑动:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//CoordinatorLayout中的滑动嵌套childView开始启动一次嵌套滚动时,回调
public boolean onStartNestedScroll(){}
//嵌套滑动结束时,回调
public void onStopNestedScroll(){}
//当一次嵌套滑动被CoordiantorLayout识别并确定时,进行回调
public void onNestedScrollAccepted(){}
//嵌套滚动正在进行中并且绑定目标childView已经开始滚动或者被CoordinatorLayout接受后试图滚动
public void onNestedScroll(){}
//嵌套滚动正在准备更新进度,并且是在绑定目标childView已经出现滚动距离之前,回调
public void onNestedPreScroll(){}
//当嵌套滚动的childView正在开始fling或者一个动作确认为fling
public boolean onNestedFling(){}
//当滑动嵌套childView检测到适当的条件,马上开始一次fling事件前回调
public boolean onNestedPreFling(){}