2016-07-19 28 views
0

Ich habe ein Problem mit RecyclerView. möchte ich an Bildschirm-Widget Position ändern, wenn Scroll recyclerView vonRecyclerWechsel Standort auf dem Bildschirm

onScrolled(RecyclerView recyclerView, int dx, int dy) 

Methode.

Bei dieser Methode ändere ich einen anderen Widget-Standort, indem ich LayoutParams ändere. Aber ich erschauere beim langsamen Scrollen.

RecyclerView hat match_parent height, wenn ich den Standort einer anderen Ansicht ändere, der freien Platz zum Recken von RecyclerView hat.

Wie kann ich Shiver von RecyclerView beim Strecken zu lösen?

layout

+1

Bitte fügen Sie Ihre Layout XML-Datei oder Screen-Capture. – nshmura

+0

@nshmura siehe aktualisierte Frage. –

+0

Ich denke, was Sie suchen, ist 'CoordinatorLayout'. http://android-developers.blogspot.com/2015/05/android-design-support-library.html –

Antwort

1

dynamisch die Höhe RecyclerView Wechsel scheint anti-Muster.

Ich empfehle Ihnen, paddingTop und clipToPadding = "false" zu verwenden.

Ihr Layout xml kann so aussehen:

<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> 

Ihr Java-Programm wie folgt sein:

@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

danke, ich werde versuchen und Ergebnis hier schreiben. –

Verwandte Themen