2016-06-24 7 views
4

Ich würde gerne wissen, wie man die X- oder Y-Position des n-ten Artikels in RecyclerView bekommt. Dies ist leicht zu tun, wenn sich das Objekt gerade im sichtbaren Bereich befindet. Wenn die Ansicht jedoch gerade nicht auf dem Bildschirm angezeigt wird (z. B. der aktuelle Bereich für sichtbare Objekte auf dem RecyclerView ist 4 bis 7, während der Gegenstand, an dem ich interessiert bin, beispielsweise 1 oder 10 ist), scheint es keinen Weg zu geben Wert.Erhalte x/y-Positionen des n-ten Artikels in RecyclerView

Hier ist was ich versucht habe. Ich habe die folgenden drei Felder:

private RecyclerView rv; 

/* The Layout Manager of rv */ 
private LinearLayoutManager llm; 

/* The data to be shown in the RecyclerView. */ 
private String[] data = {"0","1","2",...,"9"}; 

ich die Einzelteile „2“ bis „5“ haben auf dem Bildschirm angezeigt, und ich möchte die X/Y-Position des Punktes „9“ bekommen, die derzeit aus dem Bildschirm. Also habe ich versucht, die folgenden:

int index = 9; 
View v = rv.getChildAt(index); 
View v2 = llm.getChildAt(index); 

Leider beide v und v2 null sind. Der Grund dafür scheint zu sein, dass, während die Größe der data 10, die KindZählwert von rv und llm ist, was die Anzahl der Ansichten zur Zeit auf dem Bildschirm sichtbar, wie durch die folgenden belegt:

int count = rv.getChildCount(); 
int count2 = llm.getChildCount(); 

beiden Variablen sind 4 (die Anzahl der gegenwärtig sichtbaren Ansichten; dh "2" bis "5"). Da die Größe der recyclerView 4 ist, und ich das Element bei Index 9 nachschlagen möchte, bekomme ich oben null zurück.

+0

Sie kann nicht, was der Grund für das Erhalten x/y-Positionen von nicht sichtbaren Elementen ist? – pskink

+0

"Der Grund dafür scheint zu sein, dass, während die Größe von' data' 10 ist, der childCount von 'rv' und' ilm' die Anzahl der derzeit auf dem Bildschirm sichtbaren Ansichten ist "- Das ist mehr oder weniger korrekt. Wenn die Objekte alle die gleiche Größe haben, können Sie leicht bestimmen, was eine "Ansicht" Position außerhalb des Bildschirms wäre, wenn Sie wirklich brauchen, indem Sie die Position eines auf dem Bildschirm erhalten und aus dem Positionsunterschied und der Dimension ermitteln . –

+0

@pskink Vielen Dank für Ihren Kommentar. Wäre es hilfreich, wenn ich den Grund angeben würde, warum ich diese Werte brauche? – RestInPeace

Antwort

8

Ich habe perfekt x und y jedes Element in Recycler Sicht nach mit:

int[] originalPos = new int[2]; 
view.getLocationInWindow(originalPos); 
//or view.getLocationOnScreen(originalPos) 
int x = originalPos[0]; 
int y = originalPos[1]; 
+0

ich bekomme 0 und 0 – Pritish

+0

sehr gute Lösung ... –

Verwandte Themen