2016-05-17 9 views
2

Ich möchte die geklickte Position im Recyclerview zentrieren. Ich bin in der Lage, die Recyclerview zu bestimmten Position zu scrollen, aber ich möchte in der Mitte dieser Position auf dem Bildschirm. Ich habe diese Methode verwendet, um zu dieser Position zu blättern.So zentrieren Sie die angeklickte Position im Recyclerview

videoRecyclerview.scrollToPosition(position); 

Antwort

0

wenn Sie linearlayoutManager verwenden, können Sie diesen Code verwenden können,

linearLayoutManager.scrollToPositionWithOffset(2, 20); 

(linearLayoutManager.void scrollToPositionWithOffset (int position, 
      int offset)) 

Einstellung der Offset auf 0 mit dem oberen

2

ersten Schritt blättern zu Ihrem Artikel ausrichten sollte, aber wenn recyclerView scrollt es bringt nur das Objekt in den sichtbaren Bereich, es ist nie sicher, dass der Artikel in der Mitte oder nicht ist, so dass wir das mittlere Element finden und dann prüfen, ob wir neben dem Objekt oder dahinter stehen, hier ist die Arbeitslogik

recyclerView.smoothScrollToPosition(index); 
int firstVisibleItemPosition = rvLayoutManager.findFirstVisibleItemPosition(); 
int lastVisibleItemPosition = rvLayoutManager.findLastVisibleItemPosition(); 

int centerPosition = (firstVisibleItemPosition + lastVisibleItemPosition)/2; 

    if (index > centerPosition) { 
     recyclerView.smoothScrollToPosition(index + 1); 
    } else if (index < centerPosition) { 
     recyclerView.smoothScrollToPosition(index - 1); 
    } 
+0

das mir geholfen, dank – mohnage7

+0

sehr willkommen @ mohnage7 –

+0

Bei einer horizontalen recyclerView mit Bildern, diese Lösung isn nicht perfekt. Es kann nicht zentriert werden, wenn das angeklickte Objekt nicht bereits in der Nähe des Zentrums ist. @ Ispam Lösung https://Stackoverflow.com/a/44854796/860311 funktioniert perfekt, obwohl –

1

Wenn Sie mit einem RecyclerView und LinearLayoutManager dies funktionieren wird:

private void scrollToCenter(View v) { 
    int itemToScroll = mRecyclerView.getChildPosition(v); 
    int centerOfScreen = mRecyclerView.getWidth()/2 - v.getWidth()/2; 
    mLayoutManager.scrollToPositionWithOffset(itemToScroll, centerOfScreen); 
} 
+0

Bitte versuchen Sie zu vermeiden, nur Code als Antwort zu verlieren und versuchen zu erklären, was es tut und warum. Ihr Code ist möglicherweise nicht offensichtlich für Personen, die nicht über die entsprechende Codiererfahrung verfügen. Bitte bearbeiten Sie Ihre Antwort, um [Klärung, Kontext und versuchen Sie, Einschränkungen, Annahmen oder Vereinfachungen in Ihrer Antwort zu erwähnen.] (Https://stackoverflow.com/help/how-to-answer) –

Verwandte Themen