Gilde 和 Picasso 使用笔记

2017-03-26  本文已影响182人  白银之火

开坑,想想一个 ImageView 从看到控件到显示完图片会经历哪些过程?

1.显示默认图片

即图片在加载前显示的样子,有的 App 就会做到图片上有个转圈的动画效果、或者进度条

2.显示图片

这是最基本的功能

3.网络错误显示

在图片地址错误,或者网络不好导致图片加载失败显示的图片

4.缓存图片

图片缓存节省流量避免多次加载

5.显示压缩图片/原图

有些原图太大,实际并不需要显示这么大分辨率的图片,因此需要进行压缩

有些图片则为了需要看清,即使很大也要显示原图或接近原图效果

目前项目中我使用了 Picasso 来对图片进行处理,现在我打算使用 Glide 来解决以上的几个问题,Glide 的使用方法在网上也都非常多,在这里给自己一个使用总结

Glide 一般使用方法:

Glide.with(context)
.load(url)
.placeholder(R.drawable.loading) //占位符,显示默认图片
.error(R.drawable.error)//显示加载错误的图片
.override(100,100)//自定义剪裁图片大小
.into(imageView);

Picasso 一般使用方法:

Picasso.with(context)
.load(url)
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.resize(100, 100)//自定义剪裁图片大小
.centerCrop().into(img);
Glide 和 Picasso 的常用的方法和问题:
Picasso.with(this)
.load(url)
.into(iv, new Callback() {
     @Override
    public void onSuccess() {
    Toast.makeText(MainActivity.this, "加载成功", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onError() {
    Toast.makeText(MainActivity.this, "加载失败", Toast.LENGTH_SHORT).show();
    }
});

Glide.with(this)
.load(url)
.into(new GlideDrawableImageViewTarget(iv) {
    @Override
    public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable>animation) {
      super.onResourceReady(resource, animation);
        Toast.makeText(MainActivity.this, "加载成功", Toast.LENGTH_SHORT).show();
       }
    }
);
GlideDrawableImageViewTarget
Glide.with(this)
.load(file)
.asBitmap()//加载或使用有关 Bitmap 图片的时候需要加上
.into(new BitmapImageViewTarget(iv) {
    @Override
    public void onResourceReady(Bitmap bitmap, GlideAnimation anim) {
        super.onResourceReady(bitmap, anim);
        iv.setImageBitmap(bitmap);
        }
});

Picasso有两种方法,.get() 和 Target

    /**
     * 注意 get() 方法不能再主线程使用,会抛出异常:
     * java.lang.IllegalStateException: Method call should not happen from the main thread.
     */
        Bitmap bitmap = Picasso.with(MainActivity.this)
                .load(url)
                .placeholder(R.mipmap.ic_launcher)
                .error(R.mipmap.ic_launcher)
                .get();

    //使用 Target 时,最好不要使用匿名内部类,因为 Picasso 可能在加载完成前就把 Bitmap 给回收了;
        Picasso.with(this)
                .load(file)
                .placeholder(R.mipmap.ic_launcher)
                .error(R.mipmap.ic_launcher)
                .into(target);

    private com.squareup.picasso.Target target = new com.squareup.picasso.Target() {
        @Override
        public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
            //加载成功后会得到一个bitmap,可以自定义操作
            iv.setImageBitmap(bitmap);
        }

        @Override
        public void onBitmapFailed(Drawable errorDrawable) {
            // 加载失败进行相应处理
        }

        @Override
        public void onPrepareLoad(Drawable placeHolderDrawable) {
            
        }
    };

待续

上一篇 下一篇

猜你喜欢

热点阅读