解决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; //图片加载相关 CCImageLoader mImageLoader; //用于缓存图片,减小快速滑动时图片显示落帧现象 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; } }

以上所述就是本文的全部内容了,希望大家能够喜欢。

时间: 2024-09-20 00:09:48

解决Android快速滑动时图片一闪一闪问题的相关文章

解决Android快速滑动时图片一闪一闪问题_Android

快速滑动图片一闪一闪的问题,图片加载等处理在这里不介绍,主要就是介绍下在Adapter中维护一个LinkedHashMap解决上述问题 package com.longraise.seller.adapter; import android.content.Context; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.view.LayoutInfla

Android中RecyclerView 滑动时图片加载的优化

RecyclerView 滑动时的优化处理,在滑动时停止加载图片,在滑动停止时开始加载图片,这里用了Glide.pause 和Glide.resume.这里为了避免重复设置增加开销,设置了一个标志变量来做判断. mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, in

Android Listview滑动时不加载数据 停止时加载数据

本文实例为大家分享了Listview滑动时不加载数据 停止时加载数据的具体代码,供大家参考,具体内容如下 数据源配置(Adapter) package com.zhengsonglan.listview_loading.adapter; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import

Android Listview滑动时不加载数据,停下来时加载数据,让App更优

转载:http://blog.csdn.net/yy1300326388/article/details/45153813 数据源配置(Adapter) package com.zhengsonglan.listview_loading.adapter; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGrou

android studio启动时出错

问题描述 android studio启动时出错 如题,刚准备打开AndroidStudio就出现问题了,好郁闷.. 解决方案 问题解决了,电脑重启后一切正常! 解决方案二: 第一次启动前,要先在它的一个文件中加上一句话.加个就可以了 这是第一次加载,它会自动检测好像,加个就没了,直接进去.具体的,时间久了,忘记了,你可以百度一下 解决方案三: 上面报的错是 没有锁定系统文件夹 你查查是什么问题 解决方案四: 如何在android studio 1.0 启动时设置代理android studio

Android ListView只加载当前屏幕内的图片(解决list滑动时加载卡顿)

最近在做ListView分页显示,其中包括图片 和文字(先下载解析文字内容,再异步加载图片)发现每次点击下一页后,文字内容加载完毕,马上向下滑动,由于这时后台在用线程池异步下载图片,我每页有20条,也就是20张图片,会导致listview滑动卡顿! 这是用户不想看到的,我参考了网易新闻和电子市场等应用,发现它们都是只加载屏幕内的图片,不现实的不加载,于是我也仿照做了一个.我是菜鸟,我承认 呵呵,虽然不见得完全和他们的一样,但是确实解决了翻页时那一刻的卡顿现象. 因为未发现网上有相关文章,希望对朋

Android ListView滑动过程中图片显示重复错乱闪烁的原因及解决方法

主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及ListView的缓存机制. 1.原因分析 ListView item缓存机制:为了使得性能更优,ListView会缓存行item(某行对应的View).ListView通过adapter的getView函数获得每行的item.滑动过程中, a. 如果某行item已经滑出屏幕,若该item不在缓存内,则put进缓存,否则更新缓存: b. 获取滑入屏幕的行item之前会先判断缓存中是否有可用的ite

Android Listview 滑动过程中提示图片重复错乱的原因及解决方法_Android

主要分析Android中Listview滚动过程造成的图片显示重复.错乱.闪烁的原因及解决方法,顺便跟进Listview的缓存机制. 1.原因分析 Listview item 缓存机制:为了使得性能更优,Listview会缓存行item(某行对应的view).listview通过adapter的getview函数获得每行的item.滑动过程中, a.如果某行item已经划出屏幕,若该item不在缓存内,则put进缓存,否则更新缓存: b.获取滑入屏幕的行item之前会先判断缓存中是否有可用的it

解决Android ListView异步加载图片乱序问题

在Android所有系统自带的控件当中,ListView这个控件算是用法比较复杂的了,关键是用法复杂也就算了,它还经常会出现一些稀奇古怪的问题,让人非常头疼.比如说在ListView中加载图片,如果是同步加载图片倒还好,但是一旦使用异步加载图片那么问题就来了,这个问题我相信很多Android开发者都曾经遇到过,就是异步加载图片会出现错位乱序的情况.遇到这个问题时,不少人在网上搜索找到了相应的解决方案,但是真正深入理解这个问题出现的原因并对症解决的人恐怕还并不是很多.那么今天我们就来具体深入分析一