2015-08-31 2 views
1

В моем приложении Android у меня есть recyclerview. он имеет 10 предметов. когда пользователь достигает 9-го элемента с помощью прокрутки, мне нужно скрыть один вид, лежащий сверху recyclerview. Как мне это сделать ?Скрыть вид, когда RecyclerView достигает внизу

XML

<LinearLayout 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" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/dimen_sm" 
    android:paddingLeft="@dimen/dimen_sm" 
    android:paddingRight="@dimen/dimen_sm" 
    android:paddingTop="@dimen/dimen_sm" 
    tools:context=".MainActivity"> 

    <LinearLayout 
     android:background="@color/white" 
     android:id="@+id/top_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:paddingBottom="@dimen/dimen_sm" 
     android:paddingTop="@dimen/dimen_sm"> 

     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

    </LinearLayout> 

    <android.support.v7.widget.RecyclerView 
     android:layout_marginTop="@dimen/dimen_xs" 
     android:id="@+id/recycler_list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/white" /> 

</LinearLayout> 

активность

private void initView() { 
     mTopPanel = (LinearLayout) findViewById(R.id.top_view); 
     RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_list); 

     recyclerView.setLayoutManager(new LinearLayoutManager(this)); 
     final ArrayList<Data> listData = getListData(); 
     ListViewAdapter adapter = new ListViewAdapter(listData); 
     recyclerView.setAdapter(adapter); 

     mLinearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); 
     recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 

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

       if(mLinearLayoutManager.findLastCompletelyVisibleItemPosition() == listData.size()-1){ 
        hideTopPanel(); 
       } 
       else{ 
        showTopPanel(); 
       } 
      } 
     }); 
    } 

    private void showTopPanel() { 
     mTopPanel.animate().translationY(0).setInterpolator(new DecelerateInterpolator(2)); 
     mTopPanel.animate().translationY(0).setInterpolator(new DecelerateInterpolator(2)).start(); 
    } 

    private void hideTopPanel() { 
     mTopPanel.animate().translationY(-mTopPanel.getHeight()).setInterpolator(new AccelerateInterpolator(2)); 
    } 

это работает отлично. но пространство скрытого макета видно. Я хочу, чтобы recyclerview отрегулировал свой вид после того, как верхняя панель скрыта. как я это сделаю?

прокомментируйте, если вопрос вам непонятен.

ответ

3

то, что сделал вышеприведенный подход, - это просто оживить верхнюю панель и сохранить recyclerview на своем месте, чтобы достичь того, что вы надеетесь, что вам придется анимировать вид ресайклера. Или попробуйте установить свойство видимости верхней панели GONE с помощью mTopPanel.setVisibility(View.GONE) после окончания анимации

private void showTopPanel() { 
    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_list); 
    recyclerView.animate().translationY(0).setInterpolator(new DecelerateInterpolator(2)).start(); 
    mTopPanel.animate().translationY(0).setInterpolator(new DecelerateInterpolator(2)).start(); 
} 
private void hideTopPanel() { 
    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_list); 
    recyclerView.animate().translationY(-mTopPanel.getHeight()).setInterpolator(new DecelerateInterpolator(2)).start(); 
    mTopPanel.animate().translationY(-mTopPanel.getHeight()).setInterpolator(new AccelerateInterpolator(2)).start(); 
} 

Еще одна мысль, что может быть сделано непосредственно анимировать родительский линейное расположение.

+0

На самом деле мне нужна анимация при скрытии и отображении вида – droidev

+0

попробуйте вышеуказанное обновление, это поможет вам в этом. Я использовал ваш код, но не проверял его. – harshitpthk

+0

попробовал это, просмотр ресайклера движется вверх, но его нижняя часть также перемещается в начало – droidev

Смежные вопросы