2016-07-19 3 views
0

У меня проблема с RecyclerView. Я хочу изменить виджет расположение на экране, когда свиток recyclerView поИзменение местоположения RecyclerView на экране

onScrolled(RecyclerView recyclerView, int dx, int dy) 

метода.

В этом методе я изменяю другое местоположение виджетов, изменяя LayoutParams. Но при медленной прокрутке я получаю дрожь.

RecyclerView имеет высоту match_parent, когда я меняю местоположение другого вида, свободное место для растягивания RecyclerView.

Как я могу решить дрожь RecyclerView при растяжке?

layout

+1

Пожалуйста, добавьте ваш макет XML файл или захвата экрана. – nshmura

+0

@nshmura посмотрите пожалуйста обновленный вопрос. –

+0

Я думаю, что вы ищете 'CoordinatorLayout'. http://android-developers.blogspot.com/2015/05/android-design-support-library.html –

ответ

1

Динамическое изменение высоты RecyclerView кажется антишаблоном.

Я рекомендую вам использовать paddingTop и clipToPadding = "false".

Ваш макет XML может выглядеть так:

<FrameLayout 
     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/recycler_view" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:clipToPadding="false"/> 

    <FrameLayout 
      android:id="@+id/header_container" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

     ... here is same layout, samll text and "STARTEN" button. 

    </FrameLayout> 

</FrameLayout> 

Ваша программа Java может выглядеть так:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    ... 

    final View headerContainer = findViewById(R.id.header_container); 
    final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 

    ... initialization of recyclerView ... 

    recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 
     @Override 
     public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
      //change height of headerContainer 
     } 
    }); 

    // set paddingTop of RecyclerView 
    headerContainer.getViewTreeObserver().addOnGlobalLayoutListener(
      new ViewTreeObserver.OnGlobalLayoutListener() { 
       @Override 
       public void onGlobalLayout() { 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
         headerContainer.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
        } else { 
         headerContainer.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
        } 

        recyclerView.setPadding(
          recyclerView.getPaddingLeft(), 
          headerContainer.getHeight(), 
          recyclerView.getPaddingRight(), 
          recyclerView.getPaddingBottom() 
        ); 
       } 
      }); 
} 
+0

спасибо, я постараюсь написать здесь результат. –

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