Android View.getLocalVisibleRect的使用(View是否在可見區(qū)域)

Android開發(fā)時有時候需要對View的可見性進(jìn)行判斷猾瘸,常見的有

public int View.getVisibility();
public boolean View.isShown();

但是這些只能簡單的判斷這個View是否可見,有時候我們需要更為復(fù)雜的功能古话,比如View的可見區(qū)域占其自身的百分比等雏吭,常見需求為滾動視頻列表時當(dāng)滑出屏幕外一定百分比時暫停播放等。

View.getLocalVisibleRect(Rect rect)

這個方法會返回View的可視區(qū)域的Rect對象
它有如下注意項:

  • 當(dāng)View可見時陪踩,無論是否完全可見杖们,Rect內(nèi)的坐標(biāo)所在坐標(biāo)系的原點為View自己的坐標(biāo)原點
  • 當(dāng)View不可見時,Rect內(nèi)的坐標(biāo)所在坐標(biāo)系的原點為View的父控件的坐標(biāo)原點

圖解

  1. View可見
  • 部分可見肩狂,底部滑入


    底部滑入.png

rect:left=0,top=0,right=990,bottom=150;
因為View可見時是以自己為坐標(biāo)系計算的摘完,所以left和top都為0,right為自身寬度婚温,bottom為可視區(qū)域高度

  • 部分可見描焰,頂部滑出


    頂部滑出.png

rect:left=0,top=150,right=990,bottom=300;
因為View可見時是以自己為坐標(biāo)系計算的,所以left為0栅螟,top為滑出ScrollView的高度150荆秦,right為自身寬度,bottom為View自身高度

  • 完全可見


    完全可見.png

rect:left=0,top=0,right=990,bottom=300;
因為View可見時是以自己為坐標(biāo)系計算的力图,所以left和top都為0步绸,right為自身寬度,bottom為View自身高度

2.不可見

  • 在底部


    底部不可見.png

rect:left=15,top=2060,right=1005,bottom=2360;
因為View不可見時是以父控件為坐標(biāo)系計算的
ScrollView的高度為1860吃媒,加上View與ScrollView的距離200瓤介,所以top=2060
left為View與ScrollView的margin,所以left為15
right和bottom分別為加上View的寬度和高度

  • 在頂部


    頂部不可見.png

rect:left=15,top=-500,right=1005,bottom=-200;

判斷View是否在可視區(qū)域內(nèi)

不難看出,當(dāng)View不在可視區(qū)域內(nèi)時

  • 在頂部赘那,Rect.top <0
  • 在底部刑桑,Rect.bottom>View.getHeight
    所以
public boolean isVisible(Rect rect){
        return !(rect.top<0||rect.bottom>getHeight());
}

判斷View可視區(qū)域占其自身百分比

public int getVisibilePercent(Rect rect){
        return rect.height() * 100 / getHeight();
}

結(jié)束語

圖是用畫圖畫的,將就看募舟,手動滑稽

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末祠斧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子拱礁,更是在濱河造成了極大的恐慌琢锋,老刑警劉巖辕漂,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吴超,居然都是意外死亡钉嘹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門鲸阻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跋涣,“玉大人,你說我怎么就攤上這事赘娄∑统保” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵遣臼,是天一觀的道長性置。 經(jīng)常有香客問我,道長揍堰,這世上最難降的妖魔是什么鹏浅? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮屏歹,結(jié)果婚禮上隐砸,老公的妹妹穿的比我還像新娘。我一直安慰自己蝙眶,他們只是感情好季希,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著幽纷,像睡著了一般式塌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上友浸,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天峰尝,我揣著相機(jī)與錄音,去河邊找鬼收恢。 笑死武学,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的伦意。 我是一名探鬼主播火窒,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼驮肉!你這毒婦竟也來了沛鸵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎曲掰,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奈辰,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡栏妖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了奖恰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吊趾。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖瑟啃,靈堂內(nèi)的尸體忽然破棺而出论泛,到底是詐尸還是另有隱情,我是刑警寧澤蛹屿,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布屁奏,位于F島的核電站,受9級特大地震影響错负,放射性物質(zhì)發(fā)生泄漏坟瓢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一犹撒、第九天 我趴在偏房一處隱蔽的房頂上張望折联。 院中可真熱鬧,春花似錦识颊、人聲如沸诚镰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽清笨。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背未荒。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工级零, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人明肮。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親谨敛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355