2016-06-24 8 views
4

RecyclerViewのn番目の項目のXまたはY位置を取得する方法を知りたいと思います。アイテムが現在可視範囲内にある場合、これは簡単に実行できます。しかし、ビューが現在スクリーンから外れているとき(例えば、RecyclerView上の現在表示されているアイテムの範囲が4から7で、関心のある項目が1または10であるなど)、それを得る方法がないようです値。RecyclerViewのn番目の項目のx/y位置を取得する

ここに私が試したことがあります。私は次の3つのフィールドがあります。

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"}; 

を私は「2」から「5」は、画面に表示される項目を持っている、と私は現在、ある項目「9」のX/Y位置を、取得したいです画面から消えます。だから私は、次のことを試してみました:

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

は残念ながら、vv2の両方がnullです。

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

両方の変数がある:dataの大きさは、以下によって証明されるようrvllmのchildCountは、どのようなビューの数は、現在表示画面上で、10であることと思われる理由4(現在表示されているビューの数、つまり「2」から「5」)。 recyclerViewのサイズは4で、インデックス9のアイテムを検索したいので、上に返されたnullが返されます。

+0

することはできません、何で非表示項目のX/Y位置を取得するための理由は? – pskink

+0

"' data'のサイズは10ですが、 'rv'と' llm'のchildCountは、現在画面に表示されているビュー数に関係なくです。 " - これは正しい、多かれ少なかれ。アイテムがすべて同じサイズであれば、本当に必要な場合はオフスクリーンの「表示」の位置を簡単に判別できます。画面上の位置を取得し、位置の差と寸法から計算します。 –

+0

@pskinkコメントありがとうございました。私がそれらの価値を必要とする理由を言うなら、それは助けになるでしょうか? – RestInPeace

答えて

8

が、私は完璧だxと、次の使用してリサイクル業者ビュー内のすべての項目のy

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

私は0と0を得ています – Pritish

+0

非常に良い解決策... –

関連する問題