2016-06-24 124 views
4

我想知道如何獲取RecyclerView中第n個項目的X或Y位置。如果物品當前處於可見範圍內,這很容易做到。但是,當視圖當前不在屏幕上時(例如,RecyclerView中的當前可見項目範圍是4到7,而我感興趣的項目是1或10),似乎沒有辦法獲得值。獲取RecyclerView中第n個項目的x/y位置

這是我的嘗試。我有以下三個方面:

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」顯示在屏幕上,我想要得到的X項目「9」,這是目前的/ Y位置關閉屏幕。所以,我試過如下:

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

不幸的是,vv2爲空。它的原因似乎是,而data大小爲10的rv的childCount和llm是什麼就證明了以下的觀點在屏幕上目前顯示的號碼,:

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

兩個變量都是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

非常好的解決方案... –

相關問題