解決Android快速滑動時圖片一閃一閃問題
更新時間:2015年07月31日 08:57:40 投稿:hebedich
這篇文章主要給大家介紹了個人在解決Android快速滑動時圖片一閃一閃問題的一些思路和方法,非常實用,有需要的小伙伴可以參考下。
快速滑動圖片一閃一閃的問題,圖片加載等處理在這里不介紹,主要就是介紹下在Adapter中維護一個LinkedHashMap解決上述問題
package com.longraise.seller.adapter;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.longraise.seller.R;
import com.longraise.seller.view.VoiceButton;
import java.lang.ref.SoftReference;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import cc.sdkutil.control.image.CCImageLoader;
import cc.sdkutil.control.image.CCImageLoaderCallback;
import cc.sdkutil.control.inject.CCInjectUtil;
import cc.sdkutil.model.inject.CCInjectRes;
/**
* Created by wangcong on 15-1-8.
*/
public class OrderFinishAdapter extends BaseAdapter {
//convertview id
private final static int BASE_ID = 0x0fff00;
private Context mContext;
private List<Map<String, Object>> mAllList;
//圖片加載相關(guān)
CCImageLoader mImageLoader;
//用于緩存圖片,減小快速滑動時圖片顯示落幀現(xiàn)象
final LinkedHashMap<String, SoftReference<Bitmap>> linkedHashMap;
final int MAX_SIZE = 16;
public OrderFinishAdapter(Context context, List<Map<String, Object>> list) {
this.mContext = context;
this.mAllList = list;
linkedHashMap = new LinkedHashMap<String, SoftReference<Bitmap>>(16, 0.75f, true) {
private static final long serialVersionUID = 1L;
@Override
protected boolean removeEldestEntry(Entry<String, SoftReference<Bitmap>> eldest) {
boolean flag = size() > MAX_SIZE;
if (flag) {
SoftReference<Bitmap> softReference = eldest.getValue();
Bitmap bitmap = softReference.get();
if (bitmap != null) bitmap.recycle();
remove(eldest.getKey());
}
return flag;
}
};
}
public int getCount() {
return mAllList.size();
}
public Object getItem(int position) {
return mAllList.get(position);
}
public long getItemId(int position) {
return position;
}
@SuppressWarnings("deprecation")
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.adapter_finish_item, parent, false);
holder = new ViewHolder();
CCInjectUtil.inject(holder, convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
convertView.setId(BASE_ID + position);
final Map<String, Object> map = mAllList.get(position);
//處理圖片
SoftReference<Bitmap> softReference = linkedHashMap.get(map.get("orderImgUrl"));
Bitmap bitmap = softReference == null ? null : softReference.get();
if (bitmap == null) {
holder.image.setBackgroundResource(R.drawable.default_image_error);
if (mImageLoader == null)
mImageLoader = new CCImageLoader.Builder().needCacheInDisk().outSize(120, 120)
.callback(new CCImageLoaderCallback() {
@Override
public void onSuccess(Bitmap bitmap, Object... objs) {
super.onSuccess(bitmap, objs);
if (bitmap != null) { //圖片加載成功后處理
ImageView imageView = (ImageView) objs[0];
imageView.setBackgroundDrawable(new BitmapDrawable(mContext.getResources(), bitmap));
SoftReference<Bitmap> soft = new SoftReference<Bitmap>(bitmap);
linkedHashMap.put(objs[1] + "", soft);
bitmap = null;
}
}
}).build();
mImageLoader.loadNetImage(map.get("orderImgUrl") + "", holder.image, map.get("orderImgUrl"));
} else {
holder.image.setBackgroundDrawable(new BitmapDrawable(mContext.getResources(), bitmap));
}
return convertView;
}
static class ViewHolder {
@CCInjectRes(R.id.order_item_image)
ImageView image;
}
}
以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。
您可能感興趣的文章:
- Android實現(xiàn)Banner界面廣告圖片循環(huán)輪播(包括實現(xiàn)手動滑動循環(huán))
- Android開發(fā)之使用ViewPager實現(xiàn)圖片左右滑動切換效果
- Android實現(xiàn)圖片自動輪播并且支持手勢左右無限滑動
- Android 高仿微信朋友圈動態(tài)支持雙擊手勢放大并滑動查看圖片效果
- Android實現(xiàn)手勢滑動多點觸摸放大縮小圖片效果
- Android手勢滑動實現(xiàn)ImageView縮放圖片大小
- Android中RecyclerView 滑動時圖片加載的優(yōu)化
- Android 使用ViewPager實現(xiàn)圖片左右循環(huán)滑動自動播放
- Android 利用ViewPager實現(xiàn)圖片可以左右循環(huán)滑動效果附代碼下載
- Android利用ViewPager實現(xiàn)帶小圓球的圖片滑動
相關(guān)文章
Android ViewPager導(dǎo)航小圓點實現(xiàn)無限循環(huán)效果
這篇文章主要為大家詳細介紹了Android ViewPager導(dǎo)航小圓點實現(xiàn)無限循環(huán)效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08
android中UIColletionView瀑布流布局實現(xiàn)思路以及封裝的實現(xiàn)
本篇文章主要介紹了android中UIColletionView瀑布流布局實現(xiàn)思路以及封裝的實現(xiàn),具有一定的參考價值,有興趣的可以了解一下。<BR>2017-02-02
Android項目實戰(zhàn)之Glide 高斯模糊效果的實例代碼
這篇文章主要介紹了Android項目實戰(zhàn)之Glide 高斯模糊效果的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-06-06
Android Chronometer控件實現(xiàn)計時器函數(shù)詳解
這篇文章主要為大家詳細介紹了Android Chronometer控件實現(xiàn)計時器函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-04-04

