有時有些需求要求開發判斷view是否在手機螢幕的顯示範圍內。例如:列表中廣告的**,開始雖然請求到廣告,但是廣告在列表的底部,超出了手機螢幕的範圍,不能上報,當使用者向上滑動,看到了廣告才要求上報。
常用方法:
根據view原始碼可以看出,getvisibility( )方法的返回值為
0 visible 表示view可見note:view.setvisibility(view.visible)後,不管view是否在手機螢幕內顯示返回的都是visible。不要錯誤的理解為在螢幕內顯示為visible,螢幕外為invisible或gone。4 invisible 表示view不可見,但保留view佔的位置
8 gone 表示view不可見,不保留view的位置
這個方法遞迴地去檢查這個view以及它的父類view的visibility屬性是不是等於view.visible,這樣就對這個view的所有父類view做了乙個檢查。另外這個方法還在遞迴的檢查過程中,檢查了parentview == null,也就是說所有的parentview都不能為null。否則就說明這個view根本沒有被addview過,對使用者不可見。即isshown()方法表示view設定為visible同時所有父類view也是visible,才返回true。
note:
1.即使view設定為visible,如果父類view不是設定visible,返回也是false。2.使用isshow方法,一定要等view繪製完成,否則判斷不準確。
rect localrect=
newrect()
boolean lv=ad.
getlocalvisibilityrect
(localrect);
log.e(
"***"
,"local"
+ localrect+
" lv: "
+lv+
" lh: "
+localrect.
height()
);
該方法相當把檢視的長和寬對映到乙個rect物件上。
rect globalrect =
newrect()
;boolean **=ad.
getglobalvisiblerect
(globalrect)
;log.e(
"***"
,"global"
+ globalrect+
" **: "
+**+
" gh: "
+globalrect.
height()
);
通過日誌可知:getlocalvisibilityrect計算座標為當前view的左上角頂點,getglobalvisibilityrect方法計算座標為手機螢幕顯示的左上角頂點。
note:
1.使用getlocalvisiblerect
()和getglobalvisibilityrect
()判斷view的可見性時,一定要等view繪製完成後,再去呼叫這兩個方法,否則無法得到對的結果,返回值的rect值都是0,visibility為false。這和獲取view的寬高原理是一樣的,如果view沒有被繪製完成,那麼view.getwidth和view.getheight一定是等於0的。例如,測試時發現,僅僅在**中findviewbyid
()把view初始化出來,而對view沒有其他操作,並不能保證view繪製完成,
2.使用getlocalvisiblerect
()和getglobalvisibilityrect
()判斷view可見性,使用方法的返回值,而不是獲取對映矩形的高度或寬度。因為寬度和高度是絕對值,不管是全部可見和全部不可見都是固定的。
Vim中顯示不可見字元
在linux中,cat a file可以把檔案中的所有 可見的和不可見的字元 都顯示出來,在vim中,如何將不可見字元也顯示出來呢?當然,如果只是想在vim中檢視的話,可以這樣 cat a在vim中呼叫cat轉換顯示。這樣的做法不便於編輯,其實vim本身是可以設定顯示不可見字元的。只需要 set i...
android view介紹 隨心
activity是android程式的顯示層,每乙個顯示視窗都是乙個activity 可是activity本身無法顯示在螢幕上,我們可以把它理解成是乙個抽象層,乙個殼子 就譬如乙個jsp頁面,它本身並沒有顯示出來任何東西,負責顯示的是他生成的html標籤。那麼android裡誰才是真正顯示出來的部分...
android view繪製過程
簡單描述可以解釋為 計算大小 measure 布局座標計算 layout 繪製到螢幕 draw 下面看看每一步的動作到底是什麼,第一步 當activity啟動的時候,觸發初始化view過程的是由window物件的decorview呼叫view 具體怎樣從xml中讀取是用layoutinflater....