2016-07-19 5 views
0

私はRecyclerViewに問題があります。 は、私は、画面でウィジェットの位置を変更したいときRecyclerView画面上の場所を変更

onScrolled(RecyclerView recyclerView, int dx, int dy) 

法によるスクロールrecyclerView。

このメソッドでは、LayoutParamsを変更して別のウィジェットの場所を変更します。しかし、私はゆっくりとスクロールすると震えを受けます。

RecyclerViewは、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

アンチパターンと思われます。

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

ありがとうございます。ここで結果を試してみます。 –

関連する問題