解决Android快速滑动时图片一闪一闪问题
快速滑动图片一闪一闪的问题,图片加载等处理在这里不介绍,主要就是介绍下在Adapter中维护一个LinkedHashMap解决上述问题
packagecom.longraise.seller.adapter;
importandroid.content.Context;
importandroid.graphics.Bitmap;
importandroid.graphics.drawable.BitmapDrawable;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.AbsListView;
importandroid.widget.BaseAdapter;
importandroid.widget.ImageView;
importandroid.widget.ListView;
importandroid.widget.TextView;
importcom.longraise.seller.R;
importcom.longraise.seller.view.VoiceButton;
importjava.lang.ref.SoftReference;
importjava.util.LinkedHashMap;
importjava.util.List;
importjava.util.Map;
importcc.sdkutil.control.image.CCImageLoader;
importcc.sdkutil.control.image.CCImageLoaderCallback;
importcc.sdkutil.control.inject.CCInjectUtil;
importcc.sdkutil.model.inject.CCInjectRes;
/**
*Createdbywangcongon15-1-8.
*/
publicclassOrderFinishAdapterextendsBaseAdapter{
//convertviewid
privatefinalstaticintBASE_ID=0x0fff00;
privateContextmContext;
privateList<Map<String,Object>>mAllList;
//图片加载相关
CCImageLoadermImageLoader;
//用于缓存图片,减小快速滑动时图片显示落帧现象
finalLinkedHashMap<String,SoftReference<Bitmap>>linkedHashMap;
finalintMAX_SIZE=16;
publicOrderFinishAdapter(Contextcontext,List<Map<String,Object>>list){
this.mContext=context;
this.mAllList=list;
linkedHashMap=newLinkedHashMap<String,SoftReference<Bitmap>>(16,0.75f,true){
privatestaticfinallongserialVersionUID=1L;
@Override
protectedbooleanremoveEldestEntry(Entry<String,SoftReference<Bitmap>>eldest){
booleanflag=size()>MAX_SIZE;
if(flag){
SoftReference<Bitmap>softReference=eldest.getValue();
Bitmapbitmap=softReference.get();
if(bitmap!=null)bitmap.recycle();
remove(eldest.getKey());
}
returnflag;
}
};
}
publicintgetCount(){
returnmAllList.size();
}
publicObjectgetItem(intposition){
returnmAllList.get(position);
}
publiclonggetItemId(intposition){
returnposition;
}
@SuppressWarnings("deprecation")
publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
ViewHolderholder=null;
if(convertView==null){
convertView=LayoutInflater.from(mContext).inflate(R.layout.adapter_finish_item,parent,false);
holder=newViewHolder();
CCInjectUtil.inject(holder,convertView);
convertView.setTag(holder);
}else{
holder=(ViewHolder)convertView.getTag();
}
convertView.setId(BASE_ID+position);
finalMap<String,Object>map=mAllList.get(position);
//处理图片
SoftReference<Bitmap>softReference=linkedHashMap.get(map.get("orderImgUrl"));
Bitmapbitmap=softReference==null?null:softReference.get();
if(bitmap==null){
holder.image.setBackgroundResource(R.drawable.default_image_error);
if(mImageLoader==null)
mImageLoader=newCCImageLoader.Builder().needCacheInDisk().outSize(120,120)
.callback(newCCImageLoaderCallback(){
@Override
publicvoidonSuccess(Bitmapbitmap,Object...objs){
super.onSuccess(bitmap,objs);
if(bitmap!=null){//图片加载成功后处理
ImageViewimageView=(ImageView)objs[0];
imageView.setBackgroundDrawable(newBitmapDrawable(mContext.getResources(),bitmap));
SoftReference<Bitmap>soft=newSoftReference<Bitmap>(bitmap);
linkedHashMap.put(objs[1]+"",soft);
bitmap=null;
}
}
}).build();
mImageLoader.loadNetImage(map.get("orderImgUrl")+"",holder.image,map.get("orderImgUrl"));
}else{
holder.image.setBackgroundDrawable(newBitmapDrawable(mContext.getResources(),bitmap));
}
returnconvertView;
}
staticclassViewHolder{
@CCInjectRes(R.id.order_item_image)
ImageViewimage;
}
}
以上所述就是本文的全部内容了,希望大家能够喜欢。