5

水平スクロール ビューに線形レイアウトを追加し、レイアウトにいくつかのテキスト ビューを追加しました。このレイアウトで目に見える子を取得することは可能ですか?

このコードはすべての子を取得しますが、表示されている (現在表示されている) 子のみを取得したい:

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

1 に答える 1

3

さて、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;

上記のコードはすべて、子ビューのサイズが固定されていることを前提としています。可変の子サイズを使用している場合は、最初に幅を取得して追跡する必要があります。次に、インデックスと親ビューの位置に基づいて可視性を計算します。

于 2013-03-27T09:48:04.957 に答える