码迷,mamicode.com
首页 > 移动开发 > 详细

Android下拉上滑显示与隐藏Toolbar另一种实现

时间:2015-08-26 15:48:27      阅读:651      评论:0      收藏:0      [点我收藏+]

标签:android   toolbar隐藏   上拉隐藏   

关于介绍就不说了,不使用嵌套滑动情况下,另一种实现,当然还可以用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的空白区域,来看看效果:
技术分享

版权声明:本文为博主原创文章,未经博主允许不得转载。转载注明出处:http://blog.csdn.net/u010687392

Android下拉上滑显示与隐藏Toolbar另一种实现

标签:android   toolbar隐藏   上拉隐藏   

原文地址:http://blog.csdn.net/u010687392/article/details/48003979

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!