如何监听CollapsingToolbarLayout的展开与折叠
这个问题参考的是stackoverflow上的一个提问 。在这里我把最佳答案提出来就是了。
使用官方提供的 AppBarLayout.OnOffsetChangedListener就能实现了,不过要封装一下才好用。
自定义一个继承了 AppBarLayout.OnOffsetChangedListener的类,这里命名为AppBarStateChangeListener:
public abstract class AppBarStateChangeListener implements AppBarLayout.OnOffsetChangedListener {
public enum State {
EXPANDED,
COLLAPSED,
IDLE
}
private State mCurrentState = State.IDLE;
@Override
public final void onOffsetChanged(AppBarLayout appBarLayout, int i) {
if (i == 0) {
if (mCurrentState != State.EXPANDED) {
onStateChanged(appBarLayout, State.EXPANDED);
}
mCurrentState = State.EXPANDED;
} else if (Math.abs(i) >= appBarLayout.getTotalScrollRange()) {
if (mCurrentState != State.COLLAPSED) {
onStateChanged(appBarLayout, State.COLLAPSED);
}
mCurrentState = State.COLLAPSED;
} else {
if (mCurrentState != State.IDLE) {
onStateChanged(appBarLayout, State.IDLE);
}
mCurrentState = State.IDLE;
}
}
public abstract void onStateChanged(AppBarLayout appBarLayout, State state);
}
然后这样使用它:
mAppBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {
@Override
public void onStateChanged(AppBarLayout appBarLayout, State state) {
Log.d("STATE", state.name());
if( state == State.EXPANDED ) {
//展开状态
}else if(state == State.COLLAPSED){
//折叠状态
}else {
//中间状态
}
}
});
可能这并不是什么新鲜知识,但是我是第一次有这样的需求。很久以前开源了XRecyclerView,网友使用过程中提了很多issues,第一次体会到挖坑容易填坑难。上周开始我决定把这些issues一个个的解决,提高稳定性,并增加一些功能。此次就是为了解决issues/85 。XRecyclerView修复差不多之后,我做一个文档,放在网站首页。