1. 講解這兩個(gè)方法之前, 首先我們先看下一個(gè)圖片, 只是一個(gè)簡(jiǎn)單的Activity, 一個(gè)Linearlayout(背景為紅色) 里面放了一個(gè)正方形(背景為藍(lán)色)
并且邊距已經(jīng)標(biāo)出.

2.? 接下來我們看這兩個(gè)方法獲得的值(背景為藍(lán)色 View 的矩形框)
//Kotlin code
var globalVisibleRect = Rect()
testVisiblty.getGlobalVisibleRect(globalVisibleRect)
var localVisibleRect = Rect()
testVisiblty.getLocalVisibleRect(localVisibleRect);
Log.d("MainActivity", "test globalVisibleRect::" + globalVisibleRect)
Log.d("MainActivity", "test localVisibleRect::" + localVisibleRect)
3.? 查看log輸出
02-26 07:00:31.361 9716 9716 D MainActivity: test globalVisibleRect::Rect(150, 150 - 750, 750)
可以看出這個(gè)坐標(biāo)的獲得是想對(duì)于屏幕左上角的坐標(biāo). (矩形左上角距離屏幕頂端的距離是150[left], 150[top]), 右下角距離屏幕的距離
是Right = [Left+600px] = 750, 同理Bottom 是一樣的
02-26 07:00:31.362? 9716? 9716 D MainActivity: test localVisibleRect::Rect(0, 0 - 600, 600)
可以看出這個(gè)坐標(biāo)的獲得是想對(duì)于自身的坐標(biāo).(矩形左上角距離自己的距離為0,0) 同理右下角距離左上角的距離為(600,600)
4.? 從上面來看, 沒有什么啊, 就是一個(gè)普通的坐標(biāo),一個(gè)相對(duì)于屏幕左上角, 一個(gè)是想對(duì)于自己的左上角. OK .現(xiàn)在我們改變藍(lán)色矩形框的位置, 看如下圖。把藍(lán)色矩形框位置向左邊偏移450px(150dp)

查看log輸出:
02-26 10:15:38.114 12203 12203 D MainActivity: test globalVisibleRect::Rect(150, 150 - 300, 750)
這個(gè)很好理解了. 矩形左上角距離屏幕頂端的距離是(150, 150) 右下角距離屏幕頂端的距離是(300, 750)
02-26 10:15:38.114 12203 12203 D MainActivity: test localVisibleRect::Rect(450, 0 - 600, 600)
但是這個(gè)坐標(biāo)怎么理解???
首先我們要明白這個(gè)藍(lán)色矩形是一個(gè)600x600的矩形, 而我們向左移動(dòng)了450px, 那么現(xiàn)在可以看到的是150x600, 這個(gè)時(shí)候可見區(qū)域的頂點(diǎn)
坐標(biāo)相對(duì)于原圖形的600x600來說是距離原圖形的左上角距離是450px, 同理600也是.
總結(jié):
getGlobalVisibleRect() 是view可見區(qū)域相對(duì)與屏幕來說的坐標(biāo)位置.
getLocalVisibleRect()是view可見區(qū)域想對(duì)于自己坐標(biāo)的位置.
一定要記清楚是可見區(qū)域.