关于介绍就不说了,不使用嵌套滑动情况下,另一种实现,当然还可以用design包下的CoordinatorLayout.Behavior。比较简单直接添代码:

继承RecyclerView.OnScrollListener重写onScrolled方法,同时定义两个抽象方法供我们处理隐藏和显示事件

public abstract class RecyclerViewScrollListener extends RecyclerView.OnScrollListener {    private static final int SCROLL_DISTANCE = 50;    private int totalScrollDistance;    private boolean isShow = true;    @Override    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {        super.onScrollStateChanged(recyclerView, newState);    }    @Override    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {        super.onScrolled(recyclerView, dx, dy);        int firstVisableItem = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition();        //当第一个item存在界面上时就不触发隐藏、显示操作        if(firstVisableItem==0){            return;        }        if ((dy > 0 && isShow) || (dy < 0 && !isShow)) {            totalScrollDistance += dy;        }        if (totalScrollDistance > SCROLL_DISTANCE && isShow) {            hide();            isShow = false;            totalScrollDistance = 0;        } else if (totalScrollDistance < -SCROLL_DISTANCE && !isShow) {            show();            isShow = true;            totalScrollDistance = 0;        }    }    public abstract void hide();    public abstract void show();}

隐藏和显示事件处理

 mRecyclerView.addOnScrollListener(new RecyclerViewScrollListener() {            @Override            public void hide() {                mToolbar.animate().translationY(-mToolbar.getHeight()).setInterpolator(new AccelerateDecelerateInterpolator());            }            @Override            public void show() {                mToolbar.animate().translationY(0).setInterpolator(new AccelerateDecelerateInterpolator());            }        });

效果:

xml布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity">    <android.support.v7.widget.RecyclerView  android:id="@+id/recyclerView" android:layout_width="match_parent" android:paddingTop="?attr/actionBarSize" android:clipToPadding="false" android:layout_height="match_parent"/>    <android.support.v7.widget.Toolbar  android:id="@+id/toolbar" android:layout_width="match_parent" android:background="#8803A9F4" android:layout_height="?actionBarSize" /></RelativeLayout>

其中上面RecyclerView中有用到一个属性:android:clipToPadding,这个属性用的不多,这里说明一下用法,这个属性意思当就是当我们设置了paddingTop等属性时候,用来设置列表的内容是否可以绘制在padding区域, 默认是true,表示不可以绘制在padding区域,false表示可以在padding区域绘制,如上效果图显示,列表区域本来是全屏的,而我设置了paddingTop为actionbar的高度,所以列表的内容会在actionbar下面,当往上滑动时候由于我设置了android:clipToPadding="false",所以可以绘制在padding区域,下面我如果把它设为true,android:clipToPadding="true",不觉明历,肯定是上面有一块padding的空白区域,来看看效果:

更多相关文章

  1. Android简明开发教程十:数据绑定Data Binding
  2. Android中最简单有效的Fragment全局管理器(全新实现方式)
  3. Android应用程序开发之requestWindowFeature()
  4. 点击Android(安卓)SDK Manager时,SDK Manager没有显示
  5. Android(安卓)EditText添加数字自动加空格显示
  6. 【Android(安卓)Training UI】创建自定义Views(Lesson 2 - 自定
  7. [置顶] Android:自定义View实现水波进度效果
  8. Android中的SurfaceTexture
  9. 一、Android(安卓)解决在ListView Item 中Edittext数据显示混乱

随机推荐

  1. Android自定义权限
  2. android收货地址整理
  3. Android(安卓)TextView 如何判断是否已经
  4. Android(安卓)UI线程和非UI线程
  5. Android7.0中文文档(API) -- ActionMenuVie
  6. 打android的patch
  7. 基于Android官方Paging Library的Recycle
  8. android关于shape的使用
  9. Android(安卓)9.0 源码编译Android(安卓)
  10. Android横竖屏切换问题