看了CollaspingToolbarLayout的源码,发现没有关于折叠事件的监听器,要是需要在折叠完成后完成一些设置,就不能直接通过设置监听器完成了。
不过看了AppbarLayout之后,发现AppbarLayout最前面就有一个接口的声明。
/**
* Interface definition for a callback to be invoked when an {@link AppBarLayout}'s vertical
* offset changes.
*/
public interface OnOffsetChangedListener {
/**
* Called when the {@link AppBarLayout}'s layout offset has been changed. This allows
* child views to implement custom behavior based on the offset (for instance pinning a
* view at a certain y value).
*
* @param appBarLayout the {@link AppBarLayout} which offset has changed
* @param verticalOffset the vertical offset for the parent {@link AppBarLayout}, in px
*/
void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset);
}
这个Listener可以监听AppbarLayout的改变,而CollaspingToolbar的效果其中之一就是改变AppbarLayout的高度。
appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener()
{
//verticalOffset是当前appbarLayout的高度与最开始appbarlayout高度的差,向上滑动的话是负数。
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset)
{
//如果折叠后固定,那么以下判断则是折叠完成时为true
if (getSupportActionBar().getHeight() - appBarLayout.getHeight() == verticalOffset) {
//do something
}
}
});
使用CollaspingToolbarLayout遇到的问题:一般情况下,CollaspingToolbarLayout必须是AppbarLayout的第一个子元素,这样折叠才有效。