自定义Behavior实现知乎首页滑动效果-新闻详情

自定义Behavior实现知乎首页滑动效果


发布时间:2018-03-07责任编辑:朱明 浏览:2463


通常APP首页底部会有几个标签栏,点击切换到不同的模块。知乎在这个基础上做了一个效果,手指上滑,底部Tab消失,往下滑动,底部Tab重新出现,效果不错,下面研究此种效果的实现方法。

 

此种效果是靠自定义的Behavior实现的,同时结合了CoordinatorLayout的嵌套滑动。

自定义Behavior时需继承CoordinatorLayoutBehavior就可以,同时在对应控件上加入

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
等方法,结合嵌套滑动的流程,监听手势,在手指向上滑动时执行隐藏动画,在手指往下滑动时执行重新显示的动画即可实现。
 
 项目开发组   供稿