1. ホーム
  2. android

[解決済み] Android: ScrollViewの中のViewが表示されているかどうかを確認する方法は?

2022-04-14 13:45:28

質問

私は ScrollView を保持し、一連の Views . あるビューが現在表示されているかどうかを判断できるようにしたいのです(そのビューの一部が現在 ScrollView ). 以下のコードでこれを行うことを期待しますが、意外にもそうではありません。

Rect bounds = new Rect();
view.getDrawingRect(bounds);

Rect scrollBounds = new Rect(scroll.getScrollX(), scroll.getScrollY(), 
        scroll.getScrollX() + scroll.getWidth(), scroll.getScrollY() + scroll.getHeight());

if(Rect.intersects(scrollBounds, bounds))
{
    //is  visible
}

解決方法は?

使用方法 View#getHitRect の代わりに View#getDrawingRect をテストするビューに追加します。テストするビューでは View#getDrawingRect の上に ScrollView を明示的に計算するのではなく

からのコード View#getDrawingRect :

 public void getDrawingRect(Rect outRect) {
        outRect.left = mScrollX;
        outRect.top = mScrollY;
        outRect.right = mScrollX + (mRight - mLeft);
        outRect.bottom = mScrollY + (mBottom - mTop);
 }

のコード View#getHitRect :

public void getHitRect(Rect outRect) {
        outRect.set(mLeft, mTop, mRight, mBottom);
}