2015-11-24 61 views
0

我想实现包含物品的Recyclerview,并且在包含3个按钮的屏幕底部有一个布局,并且我想让它消失或者一旦开始滚动RecyclerView就将其向下滑动。我搜索了很多,找不到任何关于这个......我知道如何实现折叠工具栏布局,但有没有什么诀窍如何做到底部布局。在Recyclerview中向下滚动时,会使布局向下/向外滑动?

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:fab="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/c2" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"> 

     <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 

      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

      <android.support.v7.widget.RecyclerView 
       android:id="@+id/rvContacts" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" /> 




     <com.github.clans.fab.FloatingActionMenu 
      android:id="@+id/menu2" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentRight="true" 
      android:paddingBottom="10dp" 
      android:paddingLeft="10dp" 
      android:paddingRight="10dp" 
      fab:menu_backgroundColor="#ccffffff" 
      fab:menu_fab_label="Menu label" 
      fab:menu_icon="@drawable/filter2" 
      fab:menu_labels_ellipsize="end" 
      fab:menu_labels_singleLine="true"> 

      <com.github.clans.fab.FloatingActionButton 
       android:id="@+id/fab1" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/aa" 
       fab:fab_label="Menu item 1" 
       fab:fab_size="mini" /> 

      <com.github.clans.fab.FloatingActionButton 
       android:id="@+id/fab2" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/aa" 
       fab:fab_label="Menu item 2" 
       fab:fab_size="mini" /> 

      <com.github.clans.fab.FloatingActionButton 
       android:id="@+id/fab3" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/aa" 
       fab:fab_label="Menu item 3" 
       fab:fab_size="mini" /> 

     </com.github.clans.fab.FloatingActionMenu> 

     </android.support.design.widget.CoordinatorLayout> 
    </RelativeLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="50dp" 
     android:background="#e7e7e7" 
     android:gravity="bottom" 
     android:orientation="horizontal" 
     android:weightSum="3"> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="1"> 

      <TextView 
       android:id="@+id/allbrands" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_centerInParent="true" 
       android:text="All Brands" 
       android:textSize="10dp" /> 


     </RelativeLayout> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:orientation="vertical" 
      android:weightSum="2"> 

      <RelativeLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_weight="0.8"> 

       <ImageView 
        android:id="@+id/brandsearch" 
        android:layout_width="32dp" 
        android:layout_height="32dp" 
        android:layout_centerInParent="true" 
        android:src="@drawable/search01" 

        /> 
      </RelativeLayout> 

      <RelativeLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_weight="1.2"> 

       <TextView 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:gravity="center|top" 
        android:text="Search Brands" 
        android:textSize="10dp" /> 


      </RelativeLayout> 


     </LinearLayout> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="1"> 

      <TextView 
       android:id="@+id/allposts" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_centerInParent="true" 
       android:text="All Posts" 
       android:textSize="10dp" /> 
     </RelativeLayout> 


    </LinearLayout> 
</LinearLayout> 

回答

1

创建一个滚动监听器,并加入到RecyclerView

public abstract class HidingScrollListener extends RecyclerView.OnScrollListener { 

    public boolean mControlsVisible = true; 
    private int HIDE_THRESHOLD = 50; 
    private int mScrolledDistance = 0; 

    public HidingScrollListener(int threshold) { 
     this.HIDE_THRESHOLD = threshold; 
    } 

    private HidingScrollListener() { 
    } 

    public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
     super.onScrolled(recyclerView, dx, dy); 

     int firstVisibleItem = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition(); 
     if (firstVisibleItem == 0) { 
      if (!mControlsVisible) { 
       onShow(); 
       mControlsVisible = true; 
      } 
     } else { 
     if (mScrolledDistance > HIDE_THRESHOLD && mControlsVisible) { 
      onHide(); 
      mControlsVisible = false; 
      mScrolledDistance = 0; 
     } else if (mScrolledDistance < -HIDE_THRESHOLD && !mControlsVisible) { 
      onShow(); 
      mControlsVisible = true; 
      mScrolledDistance = 0; 
     } 
     } 
     if ((mControlsVisible && dy > 0) || (!mControlsVisible && dy < 0)) { 
      mScrolledDistance += dy; 
     } 
    } 

    public void resetScrollDistance() { 
     mControlsVisible = true; 
     mScrolledDistance = 0; 
    } 

    public abstract void onHide(); 

    public abstract void onShow(); 
} 

初始化监听

int threshold = 50; 
     listener = new HidingScrollListener(threshold) { 
      @Override 
      public void onHide() { 
       hideViews(); 
      } 

      @Override 
      public void onShow() { 
       showViews(); 
      } 
     }; 

yourListView.addOnScrollListener(listener); 

实现显示和隐藏视图方法

public void showViews() { 
     listener.resetScrollDistance(); 
     view.animate().translationY(0).setInterpolator(new DecelerateInterpolator(2)).setDuration(ANIMATION_DURATION); 
    } 

    public void hideViews() { 
     view.animate().translationY(view.getHeight()).setInterpolator(new AccelerateInterpolator(2)).setDuration(ANIMATION_DURATION); 

    } 

单独调整translationY值

+0

您在哪里定义视图以隐藏?我无法找到它.... plzz告诉我.. –

+0

里面的活动或片段使用FindViewById并初始化视图....这里的视图代表你想隐藏的按钮 –

+0

我编辑了'hideViews()'方法 –