通常我們在使用app的時候都會遇到這么一個場景,點開縮略圖查看大圖,而現在一般app都為這樣的一個功能加上了過渡動畫,不會讓人覺得這個過程很突兀,體驗就好了很多。但是,通常的,新的大圖頁面的圖片加載往往需要時間,所以在實現這樣的一個功能的時候,怎樣讓圖片看起來像是沒有被改變過并且真正顯示在大圖上面的是高清圖,需要一點小技巧。
其實沒有那么復雜,我們只需要對開啟的新頁面中的大圖設置一個初始默認圖,這張圖片的來源即點擊時的那一張縮略圖,那么怎樣獲取這張做略圖,相信大家一定有很多的方法,我現在采用的是ImageView.getDrawable()。拿到這個drawable對象之后,那么只需要把它設置到大圖上去就好,怎么傳值?好吧,其實我使用的是單例對象持有該drawable,在第二個頁面開啟時獲取。這個時候就會遇到一個坑,每次第二個頁面從onStop回復到onResume狀態(比如頁面跳轉,或者點擊Home鍵)時,此時關閉大圖頁面,原來的縮略圖就不一樣了,它只顯示了一部分!
Why?原來是被單例持有的這個drawable它同時被兩個ImageView繪制了,在第二次ImageView繪制的時候這張Drawable的bounds被改變了,所以當回到原來的縮略圖頁面時,控件和drawable的bounds不一樣了,顯示的效果也就變成了只顯示一部分。
那么其實只需要復制一個一樣內容的drawable給大圖作為占位圖就好了,Drawable本身也提供了這樣一個方法:drawable.getConstantState().newDrawable() 這樣我們就拿到一個同樣內容不同對象的drawable了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。