UIL加载图片简介

2016-11-28  本文已影响296人  i冰点

1、UIL

详细使用参考这里 Android开源框架Universal-Image-Loader详解Android-Universal-Image-LoaderAndroid-Universal-Image-Loader最新框架解析

这里只说一下注意事项:

1、ImageLoader是根据ImageView的height,width确定图片的宽高

2、在DisplayImageOptions中设置图片的缩放方式

imageScaleType(ImageScaleType.EXACTLY)
。。。

可以在Application里做一下初始化:


    private void initImageLoader(Context context) {
        mOptions = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.mipmap.ic_loading_large)//设置图片在下载期间显示的图片
                .showImageForEmptyUri(R.mipmap.ic_loading_large)//设置图片Uri为空或是错误的时候显示
                .showImageOnFail(R.mipmap.ic_loading_large) //设置图片加载/解码过程中错误时候显示的图片
                .cacheOnDisk(true)//设置下载的图片是否缓存在内存中
                .cacheInMemory(true)//设置下载的图片是否缓存在SD卡中
                .imageScaleType(ImageScaleType.EXACTLY)//设置图片的缩放方式
                .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型
                .build();

        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
                .threadPoolSize(2)// default 3  线程池内加载的数量
                .threadPriority(Thread.MIN_PRIORITY) // default Thread.NORM_PRIORITYY - 2 设置当前线程的优先级
                .denyCacheImageMultipleSizesInMemory()
                .diskCacheFileNameGenerator(new Md5FileNameGenerator())// default为使用HASHCODE对UIL进行加密命名,
                // 还可以用MD5(new Md5FileNameGenerator())加密,再保存的时候的URI名称用MD5 加密
                .diskCacheSize(200 * 1024 * 1024) // 200 Mb
                .memoryCache(new WeakMemoryCache())
                .tasksProcessingOrder(QueueProcessingType.LIFO)
                        //.writeDebugLogs() // Remove for release app
                .defaultDisplayImageOptions(mOptions)
                .build();
        // Initialize ImageLoader with configuration.
        ImageLoader.getInstance().init(config);
    }

3、设置滚动时不加载图片


    @Override
    public void onScrolled(int dx, int dy) {
            int lastVisibleItem = ((LinearLayoutManager) getLayoutManager()).findLastVisibleItemPosition();
            int totalItemCount = this.getAdapter().getItemCount();
            //有回调接口,且不是加载状态,且计算后剩下2个item,且处于向下滑动,则自动加载
            if (loadMoreListener != null && !isLoadingMore && lastVisibleItem >= totalItemCount -
                    2 && dy > 0) {
                loadMoreListener.loadMore();
            }
    }

    @Override
    public void onScrollStateChanged(int state) {
        if (imageLoader != null) {
            switch (state) {
                case SCROLL_STATE_IDLE:
                    imageLoader.resume();
                    break;
                case SCROLL_STATE_DRAGGING:
                    if (pauseOnScroll) {
                        imageLoader.pause();
                    } else {
                        imageLoader.resume();
                    }
                    break;

                case SCROLL_STATE_SETTLING:
                    if (pauseOnFling) {
                        imageLoader.pause();
                    } else {
                        imageLoader.resume();
                    }
                    break;
            }
        }
    }
滑动时不加载图片

** 注:从别人那里看到的,链接找不到了。。。 **


listView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));
gridView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));
   

2、volley

为什么不用volley?
1、 没有实现暂停/重新加载图片
2、没有处理图片的exif信息
3、如果图片路径包含中文,会有问题(可以使用URLEncode.encode())

path.substring(0,p+1)+URLEncoder.encode(path.substring(p+1,path.length()), "utf-8")

4、没有glide方便

上一篇下一篇

猜你喜欢

热点阅读