解决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; } }
以上所述就是本文的全部内容了,希望大家能够喜欢。