Androidは、getLocalVisibleRect(rect)とgetGlobalVisibleRect(rect)がビューに表示されているかどうかを判断します.

1809 ワード

[TOC]
この二つの方法の違い
  • View.getGlobalVisibleRect(rect);//画面左上を参照系とする
  • View.getLocalVisibleRect(rect);//ターゲットView左上隅を参照系
  • とする
    この点の違いを考えるとgetLocalVisibleRect(rect)のrect.leftは0に等しい.
    見えるかどうかを判断する
    boolean localVisibleRect = target.getLocalVisibleRect(rect);
    

    メソッドのソースコードに入ると、次のように表示されます.
        public final boolean getLocalVisibleRect(Rect r) {
            final Point offset = mAttachInfo != null ? mAttachInfo.mPoint : new Point();
            if (getGlobalVisibleRect(r, offset)) {
                r.offset(-offset.x, -offset.y); // make r local
                return true;
            }
            return false;
        }
    

    1.true:Viewのすべてまたは一部が表示されます.false:Viewはすべて表示されません
    true(すなわち、Viewの全部または一部が見える)を返すと、r.offset(-offset.x, -offset.y); // make r localrectの4つの座標をシフト.
    垂直なScrollviewの中の1つのViewが上にスライドする過程で、状態は --> --> で、そのRect.topの変化は:注:ここで取得したViewの高さはheight画素である.
  • すべて表示:Rect.topは0に一定である.
  • 部分可視:Rect.topの値は0-->height
  • **すべてが見えない:**すべてが見えない瞬間、Rect.トップの値はheightから-heightに急変し、その後、スライドの距離が遠くなるにつれて負の値が大きくなるにつれて、logを自分で打つことをお勧めします.ここではlogを切り取っていません.logが多すぎるからです.

  • **まとめ:**当Rect.トップの値が0でない場合、Viewは部分的に見えるか、全く見えない.では、Viewが少し見えない場合はfalseに戻って処理する必要があります.
    //  View             false!
    public static boolean isVisibleLocal(View target){
            Rect rect =new Rect();
            target.getLocalVisibleRect(rect);
            return rect.top==0;
        }
    

    使用できるシーンはまだたくさんあります.例えば、タオバオのスライドのように上部のViewにぶら下がることができます.Viewが少し見えないまでスライドすると、外層の懸濁Viewを表示する必要があります.スライドのViewが完全に見えると、懸濁のViewを隠すことができます.
    最後に
    戻るRectによって私たちは実際にもっと多くのことをすることができます.例えば、Viewに表示されている部分の面積を計算するなど、今のところ面積を求めることができません.そして、何をしていますか.mdzz...=.=