OnGlobalLayoutListener layout疑問

今天在寫業務的時候,遇到這樣一個需求,
這裏寫圖片描述

其實這個需求很常見,就是1,2,3這三塊是連在一塊移動的,當2到達屏幕頂部的時候,讓他懸浮在最頂部,剛開始的思路就是寫兩個相同的2的佈局,當2到達頂部的時候,當另外一塊顯示出來,這樣就達到了看起來懸浮在頂部的效果,但這樣的缺點就是2的有好多個點擊事件,這些點擊事件都要重複設置兩次,比較麻煩,

而我想到的一種方法是
1:當沒有到達頂部的時候,我把2這塊地方佈局空出來,把另外的跟2一樣大的佈局放在2的位置上,這樣的結果就是2原來是空白的,在空白的上面在layout了一個相同佈局的layout,
2:每次滾動的時候重新去計算2的位置,然後重新layout

因爲知道在oncreate方法中獲取尺寸是獲取不到的,所以我特意在OnGlobalLayoutListener代碼中獲取了尺寸,然後把他設置上去,最後removeOnGlobalLayoutListener();以爲這樣就沒事了,但是剛進入這個頁面的時候,始終不能把跟2相同的佈局layout到2這個空白的位置上去,然而我確實是獲取到了我想要的尺寸,當移動的時候,跟2相同佈局卻又能layout到2上去,然後我就糾結了,

然後是一陣思考。。。。。。

最後我得到的結論是
1:雖然在OnGlobalLayoutListener這個監聽方法中能獲取到想要的尺寸,但是把想要的佈局再layout到2的過程的時候,其實第一次調用layout,整個屏幕的佈局並沒有全部layout好,
2:而我又調用了removeOnGlobalLayoutListener這個方法,移除了這個監聽,
3:如果不移除監聽,OnGlobalLayoutListener裏面的方法一直會被調用,會影響UI線程,但是能夠把相同的佈局layout到2 這個位置上
4:最後的解決方案是在第一次滑動佈局的時候去移除監聽。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章