溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

android 填坑筆記

發(fā)布時間:2020-08-29 09:39:14 來源:網(wǎng)絡(luò) 閱讀:592 作者:linwg1988 欄目:移動開發(fā)

通常我們在使用app的時候都會遇到這么一個場景,點開縮略圖查看大圖,而現(xiàn)在一般app都為這樣的一個功能加上了過渡動畫,不會讓人覺得這個過程很突兀,體驗就好了很多。但是,通常的,新的大圖頁面的圖片加載往往需要時間,所以在實現(xiàn)這樣的一個功能的時候,怎樣讓圖片看起來像是沒有被改變過并且真正顯示在大圖上面的是高清圖,需要一點小技巧。

其實沒有那么復(fù)雜,我們只需要對開啟的新頁面中的大圖設(shè)置一個初始默認(rèn)圖,這張圖片的來源即點擊時的那一張縮略圖,那么怎樣獲取這張做略圖,相信大家一定有很多的方法,我現(xiàn)在采用的是ImageView.getDrawable()。拿到這個drawable對象之后,那么只需要把它設(shè)置到大圖上去就好,怎么傳值?好吧,其實我使用的是單例對象持有該drawable,在第二個頁面開啟時獲取。這個時候就會遇到一個坑,每次第二個頁面從onStop回復(fù)到onResume狀態(tài)(比如頁面跳轉(zhuǎn),或者點擊Home鍵)時,此時關(guān)閉大圖頁面,原來的縮略圖就不一樣了,它只顯示了一部分!

Why?原來是被單例持有的這個drawable它同時被兩個ImageView繪制了,在第二次ImageView繪制的時候這張Drawable的bounds被改變了,所以當(dāng)回到原來的縮略圖頁面時,控件和drawable的bounds不一樣了,顯示的效果也就變成了只顯示一部分。

那么其實只需要復(fù)制一個一樣內(nèi)容的drawable給大圖作為占位圖就好了,Drawable本身也提供了這樣一個方法:drawable.getConstantState().newDrawable() 這樣我們就拿到一個同樣內(nèi)容不同對象的drawable了。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI