標籤:
--------------------------------圖片錯位問題---------------------------------------
法一:
1:先將圖片預設為本地一個佔位圖片。(重要!很多錯位情況在於複用了其他位置的圖片緩衝,而當前圖片遲遲載入不出來,導致當前圖片錯位。所以解決之道是先用本地佔位元影像片,快速重新整理當前圖片。等載入完畢之後,就可以替換掉佔位圖片了。);
2:通過ImageView.setTag,把url記錄在圖片內部;
3:把url放進一個請求隊列,(這是避免圖片很大,請求耗時很長,重複發起url請求);
4:如果請求隊列存在url,則將老的url對應圖片控制項,替換為本次請求圖片控制項,返回;
5.如果當前url和第一步ImageView.getTag一致,則用新的資料來源更新圖片,否則返回;
6.如果是重複使用的圖片,最好就是訪問之後,寫入到本機存放區上,避免耗時網路請求。
法二:
使用弱引用關聯(具體操作不太清楚!!!)
法三:
使用Volley架構提供的NetworkImageView:
private void netRequestImage(){
ImageLoader loader = new ImageLoader(MyApplication.requestQueue, new ImageLoader.ImageCache() {
@Override
public Bitmap getBitmap(String url) {
return null;
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
}
});
iv3.setDefaultImageResId(R.mipmap.ic_launcher);
iv3.setErrorImageResId(R.mipmap.ic_launcher);
iv3.setImageUrl("http://pic14.nipic.com/20110522/7411759_164157418126_2.jpg",loader);
}
-------------------三種控制項的使用----------------------
1、準備資料來源
2、建立適配器
3、載入適配器
--------------------------最佳化問題-----------------------
1、如果自訂配接器,那麼在getView方法中要考慮方法傳進來的參數contentView是否為null,如果為null就建立contentView並返回,如果不為null則直接使用。在這個方法中儘可能少建立view。
2、給contentView設定tag(setTag()),傳入一個viewHolder對象,用於緩衝要顯示的資料,可以達到映像資料非同步載入的效果。
3、如果listview需要顯示的item很多,就要考慮分頁載入。比如一共要顯示100條或者更多的時候,我們可以考慮先載入20條,等使用者拉到列表底部的時候再去載入接下來的20條。
4、控制線程數量 + 資料分頁載入;
5、重寫onScrollStateChanged方法;
RecyclerView,ListView,GridView等UI控制項使用及其最佳化和圖片錯位-->