1. 程式人生 > >網路載入圖片時顯示錯位的解決方法

網路載入圖片時顯示錯位的解決方法

1.圖片錯位產生原因:

使用listview或者recycleview時,這兩個空間內部的複用機制,再加上非同步獲取圖片。會導致圖片顯示錯位。

圖片載入是非同步任務,通過網路,訪問伺服器並拿到圖片資源的時間是不定的,並且這個任務不在主執行緒中執行。

在非同步訪問網路的過程中,listview或者recycleview可能已經滑動,原先的convertview被複用,且被複用的convertview理應顯示另一張圖片,但是剛好,之前的非同步任務執行完成了,顯示在控制元件上。導致圖片錯位。


2.解決方法:

給listview或者recycleview的item中顯示圖片的控制元件,設定標誌,即tag

(通常為這個控制元件應該顯示的圖片的url地址)

viewHolder.iv_main.setTag(imgUrl);
從網路獲取完圖片後,需要判斷,此時這個控制元件身上的標誌(imgUrl),是否與從網路上獲取的圖片的地址一樣???

一樣,才顯示到控制元件上!!!

   public void onLoadingComplete(String imageUrl, View view, Bitmap bitmap) {
                    if (viewHolder.iv_main.getTag() != null && imageUrl.equals(viewHolder.iv_main.getTag())) {
                        bitmap = CommonUtils.scallXinDianBitmap(bitmap);
                        viewHolder.iv_main.setImageBitmap(bitmap);
                    }
                }