BottomSheetBehavior滑动源码浅析

如果转载请注明出处www.jianshu.com/p/eaac3d6e466d

Android Support Library 23.2里的 Design Support Library新加了一个Bottom Sheets控件,一个底部表,就是我们经常在分享或者地图、音乐等app看到的效果

BottomSheetBehavior在APP中的样子

调用BottomSheetBehavior中的setState方法,并么有执行相应的效果。关于setState方法,贴出源码,源码是24.2.0版本下的。

BottomSheetBehavior的setState源码带注释

这个方法大概意思是设定BottomSheet的状态,BottomSheet会自己变成这个状态并伴随动画效果。然后我写了点注释,大家自行看看,主要这块不是重点,下面的startSettlingAnimation方法也是一样。

startSettlingAnimation方法带注释

在最后面判断处,top的值有时候是跟原来child这个控件的Y坐标是一样的,然后这个判断自然是false就没法使child进行滑动了。导致我今天setState后没有反应的主要原因就是这个,之后逻辑上肯定是找top为什么是跟原来一样,也就是mMaxOffset,mMinOffset和mParentHeight的值是怎么决定的。就找到了onLayoutChild这个方法中,是决定了mMaxOffset,mMinOffset和mParentHeight的值。

没有注释的onLayoutChild部分代码

看完这个代码,问题就可以直接锁定在peekHeight这个变量身上。想要达到我要的效果应该将这个值设置成0,默认好像是45dp,记得不是很清楚了。设置这个参数可以通过在xml中的app:behavior_peekHeight标签设定,对应的java代码是setPeekHeight。

你可能感兴趣的:(BottomSheetBehavior滑动源码浅析)