当前位置: 首页 > news >正文

ImageLoader

1.准备工作

1)导入universal-image-loader-1.9.5.jar到项目中

2)创建MyApplication继承Application,在oncreate()中初始化ImageLoader

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        initImageLoader(this);
    }

    // 初始化imageloader
    private void initImageLoader(Context context) {
        // 初始化参数
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
                .threadPriority(Thread.NORM_PRIORITY - 2)               // 线程优先级
                .denyCacheImageMultipleSizesInMemory()                  // 当同一个Uri获取不同大小的图片,缓存到内存时,只缓存一个。默认会缓存多个不同的大小的相同图片
                .discCacheFileNameGenerator(new Md5FileNameGenerator()) // 将保存的时候的URI名称用MD5
                .tasksProcessingOrder(QueueProcessingType.LIFO)         // 设置图片下载和显示的工作队列排序
                .writeDebugLogs()                                       // 打印debug log
                .build();

        // 全局初始化此配置
        ImageLoader.getInstance().init(config);
    }
}

 

2.ImageLoader_Listview中使用

5)初始化DisplayImageOptions
6)获取ImageLoader实例
7)显示加载的图片

public class ImageloaderListviewAdapter extends BaseAdapter {
    private Context mContext;
    private final ImageLoader imageLoader;
    private DisplayImageOptions options = new DisplayImageOptions.Builder()
            .showStubImage(R.drawable.atguigu_logo)          // 设置图片下载期间显示的图片
            .showImageForEmptyUri(R.drawable.atguigu_logo)  // 设置图片Uri为空或是错误的时候显示的图片
            .showImageOnFail(R.drawable.atguigu_logo)       // 设置图片加载或解码过程中发生错误显示的图片
            .cacheInMemory(true)                        // 设置下载的图片是否缓存在内存中
            .cacheOnDisk(true)                          // 设置下载的图片是否缓存在SD卡中
            .displayer(new RoundedBitmapDisplayer(20))  // 设置成圆角图片
            .build();                                   // 创建配置过得DisplayImageOption对象;

    public ImageloaderListviewAdapter(Context context) {
        mContext = context;

        // 初始化imageloader
        imageLoader = ImageLoader.getInstance();
    }

    @Override
    public int getCount() {
        return Constants.IMAGES.length;
    }

    @Override
    public Object getItem(int position) {
        return Constants.IMAGES[position];
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Viewholder holder;
        if(convertView == null) {
            convertView = View.inflate(mContext, R.layout.item_imageloader_listview, null);
            holder = new Viewholder(convertView);
            convertView.setTag(holder);
        }else {
            holder = (Viewholder) convertView.getTag();
        }
        holder.name.setText("item"+(position + 1));

        imageLoader.displayImage(Constants.IMAGES[position],holder.iv,options);

        return convertView;
    }

    class Viewholder{
        @Bind(R.id.iv_imageloader_listview)
        ImageView iv;

        @Bind(R.id.tv_imageloader_name)
        TextView name;

        public Viewholder(View view) {
            ButterKnife.bind(this,view);
        }
    }
}

  

3.ImageLoader_在ViewPager中使用

public class ImageloaderViewpagerAdapter extends PagerAdapter {

    private Context mContext;
    private final ImageLoader imageLoader;
    private DisplayImageOptions options = new DisplayImageOptions.Builder()
            .showImageForEmptyUri(R.drawable.atguigu_logo)  // 设置图片Uri为空或是错误的时候显示的图片
            .showImageOnFail(R.drawable.atguigu_logo)       // 设置图片加载或解码过程中发生错误显示的图片
            .resetViewBeforeLoading(true)               // 设置图片在下载前是否重置,复位
            .cacheOnDisc(true)                          // 设置下载的图片是否缓存在SD卡中
            .imageScaleType(ImageScaleType.EXACTLY)     // 设置图片以如何的编码方式显示
            .bitmapConfig(Bitmap.Config.RGB_565)        // 设置图片的解码类型
            .displayer(new FadeInBitmapDisplayer(300))  // 设置图片渐变显示
            .build();
    ;

    public ImageloaderViewpagerAdapter(Context context) {
        mContext = context;

        // 初始化Imageloader
        imageLoader = ImageLoader.getInstance();
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        // 添加布局文件
        View view = View.inflate(mContext, R.layout.item_imageloader_viewpager, null);

        // 获取控件对象
        ImageView iv = (ImageView) view.findViewById(R.id.iv_imageloader_viewpager);

        // 显示图片
        imageLoader.displayImage(Constants.IMAGES[position], iv, options);

        ((ViewPager) container).addView(view, 0);

        return view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        ((ViewPager) container).removeView((View) object);
    }

    @Override
    public int getCount() {
        return Constants.IMAGES.length;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view.equals(object);
    }
}

 

3.ImageLoader 内存溢出解决办法

1)减少线程池中线程的个数,在ImageLoaderConfiguration中的(.threadPoolSize)中配置,推荐配置1-5。
2)在DisplayImageOptions选项中配置bitmapConfig为Bitmap.Config.RGB_565,因为默认是ARGB_8888, 使用RGB_565会比使用ARGB_8888少消耗2倍的内存。
3)在ImageLoaderConfiguration中配置图片的内存缓存为memoryCache(new WeakMemoryCache()) 或者不使用内存缓存。
4)在DisplayImageOptions选项中设置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY)。

  

  

 

转载于:https://www.cnblogs.com/ganchuanpu/p/6021469.html

相关文章:

  • 互联网盈利模式研习笔记之二:佣金与分成
  • usb_modeswitch使用详解
  • 能源项目xml文件 -- app-datasource.xml
  • 微小宝中实际支出是如何计算的?
  • python ipaddress模块使用
  • SQLAlchemy ORM高级查询之过滤,排序
  • 杰卡德距离
  • 利用beans.xml进行简单的Spring应用上下文创建与使用
  • javaScript的正则表达式 (一)
  • spark学习1(hadoop集群搭建)
  • 记录水电系统开发的心理【1】
  • MySQL -- 关闭 binlog
  • MySQL密码丢失,解决方法
  • shell自动备份文件或目录到本地和远程主机
  • 表格线边框重复css解决方法
  • css选择器
  • iOS | NSProxy
  • js继承的实现方法
  • js作用域和this的理解
  • MYSQL 的 IF 函数
  • Sass 快速入门教程
  • Spring Boot快速入门(一):Hello Spring Boot
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Vim 折腾记
  • 闭包--闭包作用之保存(一)
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 关于springcloud Gateway中的限流
  • 关于使用markdown的方法(引自CSDN教程)
  • 简析gRPC client 连接管理
  • 三栏布局总结
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 树莓派 - 使用须知
  • nb
  • Mac 上flink的安装与启动
  • (¥1011)-(一千零一拾一元整)输出
  • (2)MFC+openGL单文档框架glFrame
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (C++)八皇后问题
  • (zt)最盛行的警世狂言(爆笑)
  • (超详细)语音信号处理之特征提取
  • (二)windows配置JDK环境
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)Android学习笔记 --- android任务栈和启动模式
  • *2 echo、printf、mkdir命令的应用
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • ..回顾17,展望18
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET面试题(二)
  • @requestBody写与不写的情况
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • []利用定点式具实现:文件读取,完成不同进制之间的