1. 程式人生 > >完美解決ListView載入網路圖片亂跳問題

完美解決ListView載入網路圖片亂跳問題

先說一下為什麼會出現圖片亂跳。

使用convertView對ListView的每個item優化,item的複用可以有效降低記憶體的佔用,使ListView滑動更為流暢。但會帶來一個問題,當最頂部的item滑出螢幕時,會變成下一個從底部將要滑進來的item。每次滑進來的item都要去請求網路獲得圖片。

第一個item滑出去時,是帶著圖片的。其ImageView指向了一塊記憶體。當其慢慢滑出,從底部慢慢滑進時,底部的item與頂部(只有一半在螢幕裡能看到了)的還是指向

同一塊記憶體。載入的了同一張圖片。

但是底部的item只要一滑進來,就開始請求網路,要獲取圖片了。當底部item獲取圖片成功會將原有的圖片覆蓋。

當每個item都是這樣的執行邏輯,整個item就會變得很亂,圖片亂閃。

如何解決

解決這個問題有兩個思路:

一個是為在item複用時,檢查ImageView上是否為空,如果不為空(有圖片),則

viewHolder.imageview.setVisiable(View.GONE);

然後這個item會繼續執行請求網路圖片,當請求下來的圖片不為空(請求成功,並且設定成功),此時在viewHolder.imageview.setVisiable(View.VISIABLE);

下面是第二種思路的詳細過程。

詳細過程

佈局檔案:只有一個ListView

?
1 2 3 4 5 <relativelayout android:layout_height="match_parent" android:layout_width="match_parent" xmlns:android= xmlns:tools=> <listview android:id="@+id/lv" android:layout_height="wrap_content" android:layout_width="wrap_content"
> </listview></relativelayout>

ListView每個item佈局 ?
1 2 3 4 5 6 <!--?xml version="1.0" encoding="utf-8"?--> <linearlayout android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical" xmlns:android=> <imageview android:id="@+id/item_iv" android:layout_gravity="center_horizontal" android:layout_height="100dp" android:layout_width="100dp" android:src="@drawable/ic_launcher"> </imageview></linearlayout>

重點來了,MyAdapter中getView()方法,有兩個重點。 ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

相關推薦

完美解決ListView載入網路圖片問題

先說一下為什麼會出現圖片亂跳。 使用convertView對ListView的每個item優化,item的複用可以有效降低記憶體的佔用,使ListView滑動更為流暢。但會帶來一個問題,當最頂部的item滑出螢幕時,會變成下一個從底部將要滑進來的item。每次滑

ListView載入網路圖片的優化

最近身邊很多的人在問ListView載入網路圖片該如何防止OOM,對於初學者來說ListView雖然平常用的比較多,但大多不知道該如何進行優化。同時,在面試的過程中ListView的優化問題也是最常會被問到的,以前面試中要是你能說出優化ListView的幾個方法,

詳解ListView載入網路圖片的優化,讓你輕鬆掌握!

最近身邊很多的人在問ListView載入網路圖片該如何防止OOM,對於初學者來說ListView雖然平常用的比較多,但大多不知道該如何進行優化。同時,在面試的過程中ListView的優化問題也是最常會被問到的,以前面試中要是你能說出優化ListView的幾個方法,那基本上

Unity載入網路圖片並顯示在UGUI上,解決載入網路圖片出現問號的問題及其案例分析,例項Demo親測可用

Unity載入網路圖片並顯示在UGUI上,解決載入網路圖片出現問號的問題及其案例分析,例項Demo親測可用 最近自己在載入網路圖片的時候也遇到了載入的圖片無法顯示或者是問號的問題。下面就分析下為什麼會出現這樣的情況。   首先我們直接上程式碼(比較簡單) using U

android-Picasso請求https載入網路圖片不能顯示的解決方案

Picasso載入https的圖片載入不出來的解決方案 最近專案中有需求–要顯示https連結的圖片,但是配置好路徑後原生的Picasso死活沒法加載出圖片,最後在網上找到了如下的解決辦法 確認依賴 compile 'com.squareup.ok

iOS【完美解決SDWebImage載入多個圖片記憶體崩潰的問題】

SDWebImage大家肯定都恨熟悉了,國內外太多的App使用其進行圖片載入。但是最近在使用過程中發現,我用SDWebImage載入多個圖片,類似微博動態那種,在載入的過程中。我發現當圖片解析度比較大的時候(不是圖片大),載入幾張圖片就崩潰了。網上說可以每次載入圖片清空mem

完美解決SDWebImage載入多個圖片記憶體崩潰的問題

SDWebImage大家肯定都恨熟悉了,國內外太多的App使用其進行圖片載入。 但是最近在使用過程中發現,我用SDWebImage載入多個圖片,類似微博動態那種,在載入的過程中。我發現當圖片解析度比較大的時候(不是圖片大),載入幾張圖片就崩潰了。 網上說可以每次載入

listview中glide載入網路圖片跳躍問題

當介面上滑快要接觸到imageview的底部時 觸發glide載入圖片 載入完成時就會被拉到圖片的頂端的問題。 第一次寫部落格 可能表達的都會很奇怪吧,記錄一下這個遇到的問題。 百度找了一些方法 設定tag什麼的 無果。想起來這是因為載入圖片時,imageview的高度是w

Glide載入網路圖片,伺服器內容更新但是Glide快取無法清理的解決辦法

先描述下現象,load的URL沒有改變,但是伺服器上圖片的內容改變了,Glide清理了快取但是圖片沒有更新。 解決辦法就是給圖片加上signature的標識 Glide.with(context.getApplicationContext())

廣告banner:手動滑動切換,自動切換,點選轉,非同步載入網路圖片

效果圖: 該banner功能有自動切換圖片,點選圖片可以自定義事件,手動滑動切換,非同步載入圖片 程式碼說話: 佈局檔案: <!-- 廣告位 --> <FrameLayout android:

Android中通過Picasso來載入網路圖片,並通過ListView顯示出來。

在使用之前需要將Picasso的jar包匯入。 MainActivity程式碼: import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.o

解決RecyclerView中使用UIL載入網路圖片,在重新整理時出現閃爍問題

      對於開源框架universal-image-loader大多數開發者都不會陌生,的確這是一款很不錯的圖片類框架,值得推薦。github地址是:https://github.com/nostra13/Android,在我之前的部落格中有專門推薦GitHub上幾款比

ListView使用SimpleAdapter載入網路圖片

ListView是一種常見的佈局,通過SimpleAdapter載入資料既省力又美觀,常用做法如下: SimpleAdapter mySimpleAdapter = new SimpleAdapter (

canvas 載入網路圖片遇到的問題

<canvas id="canvas" width="800" height="500">抱歉,您的瀏覽器不支援canvas元素</canvas> 之前是這樣寫的 var img = new Image();//表示嵌入一個影象物件例項 img.src = thi

Android之Volley框架載入網路圖片

更多幹貨 分散式實戰(乾貨) spring cloud 實戰(乾貨) mybatis 實戰(乾貨) spring boot 實戰(乾貨) React 入門實戰(乾貨) 構建中小型網際網路企業架構(乾貨) python 學習持續更

C++ QT 載入網路圖片、本地圖片

原始碼下載:C++_QT 載入圖片 QTShowImage.cpp #include "QtShowImage.h" #include <QMovie> #include <QNetworkAccessManager> #include <QUrl> #i

QQ 玩一玩獲取使用者影象暱稱以及CocosCreator動態載入網路圖片

文章目錄 1、CocosCreator 載入圖片的幾種方式 2、QQ 玩一玩通過openId獲取使用者影象、暱稱 QQ 玩一玩獲取使用者影象、暱稱以及CocosC

微信小程式cavans.drawImage方法無法載入網路圖片

微信小程式cavans.drawImage方法無法載入網路圖片 canvas.drawImage(圖片地址, 起始x座標, 起始y座標, 圖片高, 圖片寬)  圖片地址src不能為網路地址:http://www.域名.com/專案/123.jpg  如果

React-native 三方框架實現上拉重新整理、下拉載入網路請求以及轉先詳情頁面

首先 第一步 需要匯入三方的類庫 和跳轉詳情頁面 yarn add react-native-refresh-list-view //導包 import RefreshListView, { RefreshState } from “react-nati

需要載入網路圖片的時候我們在adapter繫結資料裡面解析等到圖片的url

public void BindData(UserBean.DataBean date){ title.setText(date.getTitle()); data.setText(date.getPrice()+""); String R = ""; i