发布时间:2018-03-07责任编辑:朱明 浏览:2463
通常APP首页底部会有几个标签栏,点击切换到不同的模块。知乎在这个基础上做了一个效果,手指上滑,底部Tab消失,往下滑动,底部Tab重新出现,效果不错,下面研究此种效果的实现方法。
此种效果是靠自定义的Behavior实现的,同时结合了CoordinatorLayout的嵌套滑动。
自定义Behavior时需继承CoordinatorLayout的Behavior就可以,同时在对应控件上加入
app:layout_behavior=“控件地址”就可以。
Behavior内部有几个方法,解释如下:
public boolean layoutDependsOn(CoordinatorLayout parent, V child, View dependency) {
return false;
}
表示是否给应用了Behavior 的View 指定一个依赖的布局,通常,当依赖的View 布局发生变化时不管被被依赖View 的顺序怎样,被依赖的View也会重新布局。
public boolean onDependentViewChanged(CoordinatorLayout parent, V child, View dependency) {
return false;
}
当被依赖的View 状态(如:位置、大小)发生变化时,这个方法被调用。
public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, V child, View target,
int dx, int dy, int[] consumed) {
// Do nothing
}
嵌套滚动发生之前被调用,在nested scroll child 消费掉自己的滚动距离之前,嵌套滚动每次被nested scroll child,更新都会调用onNestedPreScroll。注意有个重要的参数consumed,可以修改这个数组表示你消费了多少距离。假设用户滑动了100px,child 做了90px 的位移,你需要把 consumed[1]的值改成90,这样coordinatorLayout就能知道只处理剩下的10px的滚动。
此外还有CoordinatorLayout嵌套滑动的onStartNestedScroll、onNestedScroll
等方法,结合嵌套滑动的流程,监听手势,在手指向上滑动时执行隐藏动画,在手指往下滑动时执行重新显示的动画即可实现。
项目开发组 供稿