Horizo​​ntalScrollView获取Visible Children

时间:2013-03-27 09:18:31

标签: android android-layout

我在水平滚动视图中添加了线性布局,并在布局中添加了一些文本视图。是否有可能在这种布局中获得可见的孩子。

此代码获取所有孩子,但我希望仅显示(当前显示)子项:

final HorizontalScrollView scroll = (HorizontalScrollView)findViewById(R.id.horizontalScrollView1);
    LinearLayout linearLayout = ((LinearLayout)scroll.findViewById(R.id.linearLayout1));
    int chilrenNum = linearLayout.getChildCount();

1 个答案:

答案 0 :(得分:3)

好吧,经过一番搜索后我发现这个答案听了滚动事件。 Implement Scroll Event Listener in Android。 我们的想法是覆盖onScrollChanged中的ScrollView,并跟踪活动中滚动视图的可见部分。

这样做可以通过如下代码轻松获取可见视图:

int currentPosition = lastXPosition; // lastXPosition gets updated from scroll event
int layoutWidth = linearLayout.getWidth();
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int childWidth = layoutWidth/linearLayout.getChildCount();
int firstVisibleXPos = currentPosition - width/2; // currentPosition will be in the middle of the screen
int lastVisibleXPos = currentPosition + width/2;

int indexOfFirstVisible = firstVisibleXPos/childWidth;
int indexOfLastVisible  = lastVisibleXPos/ childWidth;

以上所有代码都假设固定的子视图大小。如果您使用的是可变子大小,则需要先获取其宽度并跟踪它,然后根据父视图中的索引和位置计算可见性。