Androidは、getLocalVisibleRect(rect)とgetGlobalVisibleRect(rect)がビューに表示されているかどうかを判断します.
1809 ワード
[TOC]
この二つの方法の違い View.getGlobalVisibleRect(rect);//画面左上を参照系とする View.getLocalVisibleRect(rect);//ターゲットView左上隅を参照系 とする
この点の違いを考えるとgetLocalVisibleRect(rect)の
見えるかどうかを判断する
メソッドのソースコードに入ると、次のように表示されます.
1.true:Viewのすべてまたは一部が表示されます.false:Viewはすべて表示されません
true(すなわち、Viewの全部または一部が見える)を返すと、
垂直なScrollviewの中の1つのViewが上にスライドする過程で、状態はすべて表示:Rect.topは0に一定である. 部分可視:Rect.topの値は0-->height **すべてが見えない:**すべてが見えない瞬間、Rect.トップの値はheightから-heightに急変し、その後、スライドの距離が遠くなるにつれて負の値が大きくなるにつれて、
**まとめ:**当Rect.トップの値が0でない場合、Viewは部分的に見えるか、全く見えない.では、Viewが少し見えない場合はfalseに戻って処理する必要があります.
使用できるシーンはまだたくさんあります.例えば、タオバオのスライドのように上部のViewにぶら下がることができます.Viewが少し見えないまでスライドすると、外層の懸濁Viewを表示する必要があります.スライドのViewが完全に見えると、懸濁のViewを隠すことができます.
最後に
戻るRectによって私たちは実際にもっと多くのことをすることができます.例えば、Viewに表示されている部分の面積を計算するなど、今のところ面積を求めることができません.そして、何をしていますか.mdzz...=.=
この二つの方法の違い
この点の違いを考えると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 local
はrect
の4つの座標をシフト.垂直なScrollviewの中の1つのViewが上にスライドする過程で、状態は
--> -->
で、そのRect.top
の変化は:注:ここで取得したViewの高さは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...=.=