如何监听CollapsingToolbarLayout的展开与折叠

来源:互联网 发布:淘宝如何让宝贝排名靠前 编辑:程序博客网 时间:2024/05/18 09:12

原文地址:原文(泡在网上的日子)

使用官方提供的 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修复差不多之后,我做一个文档,放在网站首页。


1 0