Android View顯示可見屬性分析

2021-10-12 05:31:43 字數 2246 閱讀 1710

有時有些需求要求開發判斷view是否在手機螢幕的顯示範圍內。例如:列表中廣告的**,開始雖然請求到廣告,但是廣告在列表的底部,超出了手機螢幕的範圍,不能上報,當使用者向上滑動,看到了廣告才要求上報。

常用方法:

根據view原始碼可以看出,getvisibility( )方法的返回值為

0 visible 表示view可見

4 invisible 表示view不可見,但保留view佔的位置

8 gone 表示view不可見,不保留view的位置

note:view.setvisibility(view.visible)後,不管view是否在手機螢幕內顯示返回的都是visible。不要錯誤的理解為在螢幕內顯示為visible,螢幕外為invisible或gone。

這個方法遞迴地去檢查這個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....