CollapsingToolbarLayout滑动状态监听

请参照来源链接


最近在做项目中遇到一个滑动需要改变状态栏的back图标
如果只是必全局那就简单了

GIF.gif
<!--<item name="android:homeAsUpIndicator">@drawable/bt_title_back_selector</item>-->

直接在Application引用的Style里加一句这个就可以了
可需求又不能改全部的,并且项目中用到的是 android.support.v7.widget.Toolbar在调一单个Activity布局也不行。设置样式也行不通。
后面就直接在代码里设置了
toolbar.setNavigationIcon(R.drawable.bt_title_back_selector);

然后就是监听滑动改变back icon了


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);
}

上面代码直接复制使用,也是从别处拷过来的,验证可以使用

appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {
            @Override
            public void onStateChanged(AppBarLayout appBarLayout, State state) {
                if( state == State.EXPANDED ) {

                    //展开状态
                    toolbar.setNavigationIcon(R.drawable.bt_title_back_selector);

                }else if(state == State.COLLAPSED){
                    //折叠状态
                    toolbar.setNavigationIcon(android.support.v7.appcompat.R.drawable.abc_ic_ab_back_material);
                }else {
                    //中间状态
                    toolbar.setNavigationIcon(android.support.v7.appcompat.R.drawable.abc_ic_ab_back_material);

                }
            }
        });

然后就是对android.support.design.widget.AppBarLayout这个控件设置监听了
因为android.support.design.widget.CollapsingToolbarLayout外层是 android.support.design.widget.AppBarLayout所以设置的监听是它了。然后在相应的监听里你可以为所欲为了。

上面代码只是记录,防以后工作中会使用到。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,552评论 25 708
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,569评论 2 45
  • 每个人都无法选择自己的父母!这是命,无法更改的命运! 活了二十一年,确实也埋怨过!为何我没有出生在一...
    su不语阅读 1,869评论 0 0
  • 前些天跟闺蜜聊天,说起他家的财迷先生老陈。闺蜜看着婚后愈加发福的老陈,决定彻底断绝饮料供应,结果老陈就偷着喝,可老...
    默酱阅读 372评论 0 2
  • 我给你写信 一笔一划 描绘藏匿于冬季河流下的暗涌 我以一支铅笔摩擦空白的岁月 日子消逝着 笔尖磨平 我把语言的灰烬...
    f3494c632b49阅读 1,032评论 43 38