如何监听CollapsingToolbarLayout的展开与折叠

来源:互联网 发布:python arima 编辑:程序博客网 时间:2024/05/22 00:16

这个问题参考的是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 {                                    //中间状态                                }            }        });


原创粉丝点击