2016-05-06 10 views
2

Wie ändert man den Rand (unten mit 20 dp) der ersten vollständig sichtbaren Artikel auf horizontalen recycleview mit Karten? Ich kann nur den Index des ersten vollständigen sichtbaren Elements abrufen, aber keinen Verweis auf die Ansicht.Ändern Sie den Rand des ersten sichtbaren Artikels in Recyclerview

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

      firstVisibleItem = lm.findFirstCompletelyVisibleItemPosition(); 
     View view= mRecyclerView.getChildAt(firstVisibleItem); 

     RelativeLayout.LayoutParams lp= new RelativeLayout.LayoutParams(300, 150); 
     lp.setMargins(0, 0, 0, 20); 
     view.setLayoutParams(lp); 

     } 
    }); 
+0

Ich habe versucht, die Ansicht mit Ansicht anzeigen zu erhalten = mRecyclerView.getChildAt (firstVisibleItem); und setze Layout-Parameter mit Rand lp.setMargins (0, 0, 0, 20); aber arbeitete nicht – user2466059

Antwort

1

Unter der Annahme, dass view einen Verweis auf die Ansicht enthält, für die Sie die Ränder ändern möchten, können Sie den unteren Rand auf 20 Pixel festgelegt mit dem folgenden:

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 
    LinearLayout.LayoutParams.WRAP_CONTENT); 
lp.setMargins(0, 0, 0, 20); 
view.setLayoutParams(lp); 

Beachten Sie, dass dies wird sich ändern der untere Rand auf 20 Pixel und nicht 20dp. Sie müssen Ihren 20-dpi-Wert in Pixel umwandeln. Converting pixels to dp wäre ein guter Ort, um zu sehen, wie diese Konvertierung durchgeführt werden kann.

Möglicherweise müssen Sie auch die Parameter height und width im Konstruktor für LinearLayout.LayoutParams entsprechend Ihren Anforderungen ändern.

Wenn das Problem einen Verweis auf die Ansicht erhält, wäre das Posten eines Codes hilfreich.

Bearbeiten/Update Der Code geholfen. Ich glaube nicht, dass Sie den Zugriff auf die gewünschte Ansicht einrichten. Hier ist ein anderer Ansatz:

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

     // Find the adapter position of the first fully visible item 
     // May return RecyclerView.NO_POSITION that is not handled here. 
     firstVisibleItem = lm.findFirstCompletelyVisibleItemPosition(); 

     // Find the corresponding view holder for this position. 
     // MyViewHolder should already be defined (just don't know the name). 
     MyViewHolder vh = (MyViewHolder) mRecyclerView 
      .findViewHolderForAdapterPosition(firstVisibleItem); 

     // Get the layout parameters from the top-level item of this view. 
     // This could also be another view captured within the view holder. 
     RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) vh.itemView.getLayoutParams(); 

     // Make our changes and set them. 
     lp.setMargins(0, 0, 0, 50); 
     vh.itemView.setLayoutParams(lp); 
    } 
}); 
+0

dort ist mein Code, ich redigierte es..es ist das selbe wie dein Vorschlag in onscroll methos von recycleview, lm ist der layoutmanager für das recycleview aber nichts geschieht, bitte helfen..ich brauche eine Schnittstelle ziemlich wie Exkursion App – user2466059

0

Vor allem, wenn Sie das Layout oder ein ganz bestimmtes Element in einem RecyclerView ändern, können Sie nicht Ihr Layout ordnungsgemäß zu entwerfen. Sie könnten besser wollen, wie etwas zu tun ist:

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 
    <ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingBottom="20dp"/> 

    <android.support.v7.widget.RecyclerView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 
</LinearLayout> 

Wenn Sie immer noch nur ein RecyclerView verwenden möchten, dann sollten Sie onBindViewHolder außer Kraft setzen. Bei dieser Methode können Sie basierend auf der Position dieses ViewHolders unterscheiden und verschiedene Layouts für Ihre Ansicht festlegen.

@Override 
    public void onBindViewHolder(ViewHolder holder, 
           @SuppressLint("RecyclerView") final int position) { 
} 
Verwandte Themen