2016-06-24 94 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

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

相关问题