Android下拉上滑顯示與隱藏Toolbar另一種實現

來源:互聯網
上載者:User

標籤: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另一種實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.