在GridView或者ListView的Adapter中使用Glide載入圖片,圖片被拉伸問題
這個問題來自我的一篇部落格為什麼圖片載入我首先Glide 一位網友的評論,我測試了下,還真有,但是要根據圖片而定,有些圖片一點點的拉伸也看不出來,若原圖片有正圓或者正方形的圖案偶爾會顯示出橢圓或長方形有些明顯。
那這個問題的根源是什麼呢?為什麼顯示單張圖片沒有影響,放在ListView或者GridView中就有問題了,有些百思不得其解,或許跟ViewHolder模式有關吧,但奇怪的是,去其他頁面再回來,重新載入一次,又不存在問題。
1、嘗試使用其他的載入框架
使用了Volley或者UniversalImageLoader測試,都未出現類似的問題,很奇怪。
2、會不會和Glide本身有關?
載入單張圖片是沒有問題的,只有在GridView或者ListView的Adapter中使用才有問題。
3、和ViewHolder模式有關?
那又怎麼解釋再次進去就沒問題了,不應該啊!
4、和Glide快取有關?
第一次進去沒有快取,是從網路獲取圖片的,再次進去是從快取讀取的,看著有點像,興奮的測試了下,退出App再進,還是有類似的問題,已經快取了,怎麼還是這問題?
5、放棄Glide,使用其他的框架
Glide記憶體管理優秀,生命週期聯動,支援ViewHolder模式,載入圖片還那麼流暢,因為這麼個小小的問題就換了,不值,還是再想想辦法。
6、去百度Google去搜,看看別人有沒有解決這問題
百度,一搜一大堆毫不相干的搜尋結果,根本找不到想要的,翻牆上Google,還是沒找到解決辦法,去GitHub上找找別人使用Glide有沒有類似的問題,還是沒結果,本來想提問的,英文又不咋地,哎……
7、柳暗花明,都是動畫惹的禍
之前在寫DropDownMenu這個庫的時候本來還暗暗自喜比美團還流暢的切換效果時,後來卻發現狂點錯亂問題,不得不放棄那麼好的效果
仔細想想,Glide以載入流暢為主,預設有一個淡出的動畫效果,其他的圖片載入庫是沒有的,我的庫也是因為動畫而錯亂,兩者皆有動畫,或許是動畫惹的禍。果不其然,我分別測試了
Glide.with(parent.getContext()).load(urls.get(position)).into(viewHolder.mImage);
新增dontAnimate()屬性
Glide.with(parent.getContext()).load (urls.get(position)).dontAnimate().into(viewHolder.mImage);
去掉動畫,拉伸問題解決了,哈哈!!
8、結果分析
動畫因為某些因素未執行完全,停止了某一箇中間的狀態,看到這個拉伸的圖片(動畫未執行完畢的狀態),當然,為什麼動畫為執行完畢,本人就不得而知了。
文/dongjunkun(簡書作者)
原文連結:http://www.jianshu.com/p/d8e1710750ce
著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。