美文网首页
UIL加载图片简介

UIL加载图片简介

作者: i冰点 | 来源:发表于2016-11-28 21:22 被阅读296次

    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、设置滚动时不加载图片

    • recycleview
    • 重写onScrolled()方法,加载数据;
    • 重写onScrollStateChanged()方法,在非IDLE状态下,停止加载图片;
    • 使用 imageLoader.pause();暂停加载图片
    
        @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、gridview
    • pauseOnScroll—是否在滑动过程中停止加载图片
    • pauseOnFling—是否在快速猛的滑动中停止加载图片
    
    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方便

    相关文章

      网友评论

          本文标题:UIL加载图片简介

          本文链接:https://www.haomeiwen.com/subject/ycnhpttx.html