0

Ну, я пытаюсь сделать верхний бар, как тот, который находится в приложении Youtube. Он работает практически во всех случаях, но когда я использую ScrollListener из RecyclerView, я получаю проблему.Сделать вид прокрутки вдоль RecyclerView

Как вы можете видеть, что представление не изменит свою позицию в определенный момент при прокрутке.

Вот мой код:

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

      LinearLayoutManager layoutManager = (LinearLayoutManager) layoutManagerTop; 
      if(filterTopAdapter.lastSelected >= layoutManager.findFirstVisibleItemPosition() && filterTopAdapter.lastSelected <= layoutManager.findLastVisibleItemPosition()) { 
       selectionLine.setVisibility(View.VISIBLE); 
       final View view = rvTop.findViewHolderForAdapterPosition(filterTopAdapter.lastSelected).itemView; 
       selectionLine.setTranslationX(view.getLeft() - rvTop.getScrollX()); 
       Log.d("Scroll", String.valueOf(view.getLeft() - rvTop.getScrollX())); 
      } 
      else { 
       selectionLine.setVisibility(View.GONE); 
      } 

     } 

     @Override 
     public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
      super.onScrollStateChanged(recyclerView, newState); 
      LinearLayoutManager layoutManager = (LinearLayoutManager) layoutManagerTop; 
      if(filterTopAdapter.lastSelected >= layoutManager.findFirstVisibleItemPosition() && filterTopAdapter.lastSelected <= layoutManager.findLastVisibleItemPosition()) { 
       selectionLine.setVisibility(View.VISIBLE); 
       final View view = rvTop.findViewHolderForAdapterPosition(filterTopAdapter.lastSelected).itemView; 
       selectionLine.setTranslationX(view.getLeft() - rvTop.getScrollX()); 
       Log.d("Scroll", String.valueOf(view.getLeft() - rvTop.getScrollX())); 
      } 
      else { 
       selectionLine.setVisibility(View.GONE); 
      } 

     } 


    }); 
+0

Вы должны предпочитать TabLayout с установкой видимой ViewPager высота разделителя. –

ответ

1

Вы должны попробовать TabLayout с ViewPager

<?xml version="1.0" encoding="utf-8"?> 
<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="fill_parent" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    tools:context="stellar.kade_c.com.MainActivity"> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/sliding_tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:tabMode="scrollable" /> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

</RelativeLayout> 
0

Вы должны использовать TabLayout с ViewPager для этого

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