通过自定义Behavior实现“二楼”效果,兼容所有下拉刷新控件
implementation 'com.wuyr:secondfloorbehavior:1.0.4'
|Method|Description|
|---------|-------------|
|enterSecondFloor()|主动进入二楼|
|leaveSecondFloor()|主动退出二楼|
|getState()|获取当前状态:
STATE_NORMAL: 普通状态
STATE_DRAGGING: 拖动中
STATE_PREPARED: 符合触发进入二楼的条件
STATE_OPENING: 正在进入二楼
STATE_OPENED: 在二楼
STATE_CLOSING: 正在离开二楼|
|setStartInterceptDistance(float distance)|设置开始拦截下拉的滑动距离
即:列表滑动到顶后,往下拉多长距离可以开始触发二楼的下拉?|
|setMinTriggerDistance(float distance)|设置能够进入二楼的滑动距离(从触发上面的二楼下拉后开始计算)
即:拦截下拉后,至少还要继续往下滑动多长距离才能够触发进入二楼?|
|setDampingRatio(float ratio)|设置触发下拉后的滑动距离衰减率
取值范围: 0~1,0: 无衰减|
|setRollbackDuration(long duration)|设置回退的动画时长 (默认: 200)
回退:即未能触发打开二楼|
|setEnterDuration(long duration)|设置进入二楼的动画时长 (默认: 500)|
|setExitDuration(long duration)|设置退出二楼的动画时长 (默认: 400)|
|setOnBeforeEnterSecondFloorListener(Listener listener)|监听进入二楼之前的事件
在这里可以决定是否同意本次进入二楼,返回:
true: 允许进入
false: 拒绝进入|
|setOnEnterSecondFloorListener(Listener listener)|监听打开二楼的事件|
|setOnExitSecondFloorListener(Listener listener)|监听退出二楼的事件|
|setOnStateChangeListener(Listener listener)|监听各种状态变化,状态见上:getState()|
|setExitAnimationInterpolator(Interpolator interpolator)|设置退出二楼的动画插值器|
|setEnterAnimationInterpolator(Interpolator interpolator)|设置进入二楼的动画插值器|
|Name|Format|Description|
|----|-----|-----------|
|layoutstartInterceptDistance|dimension
默认: HeaderView的高度|开始拦截下拉的滑动距离|
|layoutminTriggerOffset|dimension
默认: HeaderView高度的一半|能够进入二楼的滑动距离|
|layoutdampingRatio|float (默认: 0)|触发下拉后的滑动距离衰减率
取值范围: 0~1
0: 无衰减
0.5: 衰减一半|
|layoutrollbackDuration|integer (默认: 200)|回退的动画时长|
|layoutenterDuration|integer (默认: 500)|进入二楼的动画时长|
|layoutexitDuration|integer (默认: 400)|退出二楼的动画时长|
|layoutonEnterSecondFloor|string|进入二楼的回调方法
使用方法同android:onClick属性|
|layoutonExitSecondFloor|string|退出二楼的回调方法
使用方法同上|
<!--头部View(可以是任何View)--> <textview android:id="@+id/headerView" android:layout_width="match_parent" android:layout_height="150dp" android:background="@color/colorPrimary" android:gravity="center" android:text="@string/app_name" android:textcolor="@android:color/white" android:textsize="28sp"></textview> <!--二楼View(可以是任何View)--> <androidx.recyclerview.widget.recyclerview android:id="@+id/secondFloorView" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" app:layout_behavior="com.wuyr.secondfloorbehavior.SecondFloorBehavior" app:layout_dampingratio="0.5" app:layout_enterduration="1000" app:layout_exitduration="1000" app:layout_mintriggeroffset="150dp" app:layout_onentersecondfloor="onEnterSecondFloor" app:layout_onexitsecondfloor="onExitSecondFloor" app:layout_rollbackduration="500" app:layout_startinterceptdistance="200dp"></androidx.recyclerview.widget.recyclerview> <!--一楼View(可以是任何View)--> <androidx.constraintlayout.widget.constraintlayout android:id="@+id/firstFloorView" android:layout_width="match_parent" android:layout_height="match_parent"> <androidx.swiperefreshlayout.widget.swiperefreshlayout android:id="@+id/refreshLayout" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_constraintstart_tostartof="parent" app:layout_constrainttop_totopof="parent"> <androidx.recyclerview.widget.recyclerview android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent"></androidx.recyclerview.widget.recyclerview> </androidx.swiperefreshlayout.widget.swiperefreshlayout> </androidx.constraintlayout.widget.constraintlayout>
</androidx.coordinatorlayout.widget.coordinatorlayout>