美文网首页
ImageLoader、Picasso、Fresco、Glide

ImageLoader、Picasso、Fresco、Glide

作者: 故江 | 来源:发表于2019-02-28 15:13 被阅读5次

    ImageLoader的使用

    依赖  compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'

    首先在当前程序的Application中调用ImageLoader的初始化init()方法

    private void initImageLoader() {  

    ImageLoaderConfiguration config =new ImageLoaderConfiguration.Builder(this).imageDownloader(  

    new BaseImageDownloader(this, 60 * 1000, 60 * 1000)) // connectTimeout超时时间  

                    .build();  

            ImageLoader.getInstance().init(config);  

        }  

    使用:

    imageview.displayImage();

    Picasso:

    1.添加依赖

    compile 'com.squareup.picasso:picasso:2.5.2'


    2.加载显示图片

    Picasso.with(this)

                    .load(......)

                    .into(view);

    load路径:    1)网络图片url           2)file路径

                          3)content资源          4)Android Resoure


    3.设置图片

    尺寸resize()、缩放Scale()、旋转Rotation()、

    居中裁剪centerCrop()、fit()拉伸


    4.转换器Transformation

    可以做高斯模糊、圆角、度灰处理、圆形图片等

    //高斯模糊

    class BlurTransformationimplements Transformation{

    RenderScriptrs;

    public BlurTransformation(Context context) {

    super();

    rs = RenderScript.create(context);

    }

    @Override

        public Bitmap transform(Bitmap bitmap) {

    // Create another bitmap that will hold the results of the filter.

            Bitmap blurredBitmap = bitmap.copy(Bitmap.Config.ARGB_8888,true);

    // Allocate memory for Renderscript to work with

            Allocation input = Allocation.createFromBitmap(rs, blurredBitmap, Allocation.MipmapControl.MIPMAP_FULL, Allocation.USAGE_SHARED);

    Allocation output = Allocation.createTyped(rs, input.getType());

    // Load up an instance of the specific script that we want to use.

            ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));

    script.setInput(input);

    // Set the blur radius

            script.setRadius(25);

    // Start the ScriptIntrinisicBlur

            script.forEach(output);

    // Copy the output to the blurred bitmap

            output.copyTo(blurredBitmap);

    bitmap.recycle();

    return blurredBitmap;

    }

    @Override

        public String key() {

    return "blur";

    }

    }

    //度灰处理

    class GrayTransformationimplements Transformation{

    @Override

        public Bitmap transform(Bitmap source) {

    int width, height;

    height = source.getHeight();

    width = source.getWidth();

    Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);

    Canvas c =new Canvas(bmpGrayscale);

    Paint paint =new Paint();

    ColorMatrix cm =new ColorMatrix();

    cm.setSaturation(0);

    ColorMatrixColorFilter f =new ColorMatrixColorFilter(cm);

    paint.setColorFilter(f);

    c.drawBitmap(source,0,0, paint);

    if(source!=null && source!=bmpGrayscale){

    source.recycle();

    }

    return bmpGrayscale;

    }

    @Override

        public String key() {

    return "gray";

    }

    }


    5.请求优先级

                    LOW、NORMAL(默认)、HIGH


    6.Tag管理类

    cancelTag(Object tag) 取消设置了给定tag的所有请求

    pauseTag(Object tag)  暂停设置了给定tag 的所有请求

    resumeTag(Object tag) resume 被暂停的给定tag的所有请求


    7.同步/异步加载图片

    同步:同步加载使用get() 方法,返回一个Bitmap 对象

    注:使用同步方式加载,不能放在主线程中操作

    try{

                Bitmap bitmap =  Picasso.with(this).load(URL).get();

    }catch(IOException e) {

                e.printStackTrace();

     }

    异步:fetch(Callback callback) 异步方式加载图片并给一个回调接口

    Picasso.with(this).load(URL).fetch(newCallback() {

            @Override

            public void onSuccess() {

                        //加载成功

             }

            @Override

            public void onError() {

                    //加载失败

             }

     });


    8.缓存

    Picasso 有内存缓存(Memory)和磁盘缓存( Disk)


    9.Debug和日志

            1)缓存指示器

                    Picasso.with(this)

                                    .setIndicatorsEnabled(true);//显示指示器

            2)日志

                    Picasso.with(this)

                                    .setLoggingEnabled(true);//开启日志打印


    10.Picasso扩展

                    1)配置缓存

        //配置缓存

        LruCache cache =newLruCache(5*1024*1024);// 设置缓存大小

        builder.memoryCache(cache);

                       2)配置线程池

          //配置线程池

          ExecutorService executorService = Executors.newFixedThreadPool(8);

          builder.executor(executorService);

    参考

    Picasso官网

    Picasso — Getting Started

    Fresco:

            参考链接:

                    fresco

    Glide

    implementation 'com.github.bumptech.glide:glide:4.5.0'

    annotationProcessor 'com.github.bumptech.glide:compiler:4.5.0'

    使用

    Glide.with(Context context).load(Strint url).into(ImageView imageView);

    加载动态图片

            Glide.with(this)    

                    .load(url)    

                    .asGif()//加载动态图片,若现有图片为非gif图片,则直接加载错误占位图。

                    .placeholder(R.drawable.loading)    

                    .error(R.drawable.error)   

                     .diskCacheStrategy(DiskCacheStrategy.NONE)   

                     .into(imageView);

    加载指定大小的图片

            Glide.with(this)   

                     .load(url)    

                     .placeholder(R.drawable.loading)    

                     .error(R.drawable.error)    

                    .diskCacheStrategy(DiskCacheStrategy.NONE)    

                    .override(100,100)//指定图片大小

                    .into(imageView);

    关闭框架的内存缓存机制

            Glide.with(this)    

                    .load(url)    

                    .skipMemoryCache(true)//传入参数为false时,则关闭内存缓存。

                    .into(imageView);

    关闭硬盘的缓存

               Glide.with(this)    

                    .load(url)    

                    .diskCacheStrategy(DiskCacheStrategy.NONE)//关闭硬盘缓存操作

                    .into(imageView);

    复杂的图像变换

    dependencies {

            implementation 'jp.wasabeef:glide-transformations:3.3.0'  

             Filters    implementation 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1'

    }

    图片虚化

            Glide.with(this)

                    .load(url)

                    .bitmapTransform(newBlurTransformation(this))

                    .into(imageView);

    图片黑白化

            Glide.with(this)

                    .load(url)

                    .bitmapTransform(newGrayscaleTransformation(this))

                    .into(imageView);

    多个属性同时使用

            Glide.with(this)    

                     .load(url)   

                     .bitmapTransform(newBlurTransformation(this)

                    .newGrayscaleTransformation(this))    

                    .into(imageView);

    Fresco,Glide,Picasso对比分析

    区别

    相关文章

      网友评论

          本文标题:ImageLoader、Picasso、Fresco、Glide

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