1. 程式人生 > >做右滑退出活動的庫的時候,遇到的2個問題

做右滑退出活動的庫的時候,遇到的2個問題

網上說,使得視窗透明不好,多麼多麼坑

我倒覺得,還行

我面試的時候被問過一次,真的有多坑,我自己也說不上來,看到的那些issue感覺說服不了我

不管怎麼說,當時我是信了的

然後通過last.decor.draw的方式去實現的

這樣一來,出現了兩個問題

1.在有些ROM和SDK下,進入一個頁面的時候立刻右滑,會發現底部的last.decor沒有被顯示出來。我判定為在這些ROM和SDK上,有一個穩定機制:需要等到last.decor處理好自身的狀態後,才能進行正常繪製

2.finish的時候,有5成機會會閃屏。我特意延時finish,還是發現閃屏。這才定位到了是finish自身的原因。

我後來百度了下問題2,可能使視窗透明能奏效

結果一試,不光問題2順利解決了,問題1也自動消失了。。。那一刻我的心是喜悅和無語的。

我覺得視窗透明是正確的答案。為何?我看了網易新聞,他就沒有這個問題,我斷定他是使得視窗透明的,不然神仙也解決不了這一點,改Framework得改個底朝天才行。

為啥視窗透明能解決finish閃屏呢?

(以下都是我的準確的臆測)視窗本來就是黑的,這個不用說了。你如果設定視窗是透明的,那麼視窗依然是黑的。只有在finish以後黑的才會消失。如果你不設定這個屬性,黑視窗就作為保底了。這就是閃屏原因。

為啥順帶解決了問題1呢?

具體是last.decor.draw的時候,執行到dispatchDraw時被攔截了。也就是說,設定視窗透明後,這一步就可以順利走通了。具體原因呢?我覺得必定和某個標誌位有關。

視窗設定為透明,其實不透明

我試了一下,雖然視窗設定透明瞭,我再給decor view設定null背景,發現背景還是黑色的,而不是上一個頁面的UI。所以我斷定設定視窗透明的唯一作用是,啟動、退出的時候,不再以黑背景保底,而是透明。而在當前頁面UI已渲染之後,依然是黑背景保底的。

網上的一個庫可以實現UI已渲染後,視窗也能實現透明。我覺得這樣是真的不好了。真的會引起海量bug的。

所以我依然用last.decor.draw去實現。目前看下來,整一套寫的簡直完美,但是由於公司原因,可能無法開源。。。