さて、SOで少し検索した後、スクロールイベントをリッスンするこの回答が見つかりました。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;
上記のコードはすべて、子ビューのサイズが固定されていることを前提としています。可変の子サイズを使用している場合は、最初に幅を取得して追跡する必要があります。次に、インデックスと親ビューの位置に基づいて可視性を計算します。