Amdroid强力帮手之Glide图片加载框架使用

7 篇文章 0 订阅
2 篇文章 0 订阅

      有时候我们要将图片进行缓存,以达到高效处理图片的目的,防止oom问题,你还在自己编写冗杂沉重的代码吗?有时候还需要将图片进行转换,如:剪裁、滤镜、模糊处理等等,你还在自定义view实现它们吗?这时候,我们需要一款强大的图片处理和加载框架:Glide。

  •       使用Glide有什么好处呢?
         它使用简单,一般只要几行代码搞定,可配制度高,自适应强,支持多种图片格式和数据源(assets,网络资源,本地资源,res资源等等);它还有着高效的缓存策略,可以根据Activity的生命周期自动管理请求;可以高效处理Bitmap,减小系统回收压力。

  • Glide框架的功能有哪些?
1.可以禁止和清除内存的缓存

2.可以清除和禁止磁盘缓存

3.可以获取缓存的大小

4.可以指定资源的加载顺序

5.可以先显示缩略图再显示原图来将图片显示出来

6.可以对图片进行裁剪、滤镜、模糊等处理

7.可以对请求资源状态以及网络下载的进度进行监听


  • 那么如何使用Glide加载图片呢?
         首先需要导入jar包或者添加依赖:

 compile 'com.github.bumptech.glide:glide:3.7.0'   

 compile 'jp.wasabeef:glide-transformations:2.0.1'

添加依赖的方式导入Glide方便一点,直接将其复制到app的bulid.grade下dependences下就ok,注意一下,第一个包是glide图片加载框架,第二个是glide图片变换的框架,可以实现裁剪、滤镜等功能。

         一般加载图片的实现方法:Glide.with(this).load(uri).into(imageview);

这里用到三个变量:

         this:无疑是上下文,可以是activity或者fragment;

         uri :是图片的资源路径,可以是网络、本地、系统、raw资源等

         imageview:即是图片需要显示的地方,一般为imageview,imagebutton,listview或者RecyclerView的item,整个view等等

这里就直接放上Glide常用的加载图片资源的用法吧:

//(1)加载网络图片
        
        Glide.with(this).load("http://img1.imgtn.bdimg.com/it/u=2615772929,948758168&fm=21&gp=0.jpg").into(ivGlide1);


        //(2)加载资源图片
        
        Glide.with(this).load(R.drawable.atguigu_logo).into(ivGlide2);


        //(3)加载本地图片
        
        String path = Environment.getExternalStorageDirectory() + "/meinv1.jpg";
        File file = new File(path);
        Uri uri = Uri.fromFile(file);
        Glide.with(this).load(uri).into(ivGlide3);


        // (4)加载网络gif
        
        String gifUrl = "http://b.hiphotos.baidu.com/zhidao/pic/item/faedab64034f78f066abccc57b310a55b3191c67.jpg";
        Glide.with(this).load(gifUrl).placeholder(R.mipmap.ic_launcher).into(ivGlide4);


        // (5)加载资源gif
        
        Glide.with(this).load(R.drawable.loading).asGif().placeholder(R.mipmap.ic_launcher).into(ivGlide5);


        //(6)加载本地gif
        
        String gifPath = Environment.getExternalStorageDirectory() + "/meinv2.jpg";
        File gifFile = new File(gifPath);
        Glide.with(this).load(gifFile).placeholder(R.mipmap.ic_launcher).into(ivGlide6);


        //(7)设置缩略图比例,然后,先加载缩略图,再加载原图
       
        String urlPath = Environment.getExternalStorageDirectory() + "/meinv1.jpg";
        Glide.with(this).load(new File(urlPath)).thumbnail(0.1f).centerCrop().placeholder(R.mipmap.ic_launcher).into(ivGlide8);


        //(9)先建立一个缩略图对象,然后,先加载缩略图,再加载原图
        String urlPath = Environment.getExternalStorageDirectory() + "/meinv1.jpg";
        DrawableRequestBuilder thumbnailRequest = Glide.with(this).load(new File(urlPath));
        Glide.with(this).load(Uri.fromFile(videoFile)).thumbnail(thumbnailRequest).centerCrop().placeholder(R.mipmap.ic_launcher).into(ivGlide9);

  • 如何使用glide在RecyclerView中加载图片呢?
很简单,和平时使用recyclerview的时候一样就可以了:

这里只放上adapter的代码:

public class GlideRecyclerviewAdapter extends RecyclerView.Adapter<GlideRecyclerviewAdapter.ViewHolder> {
    private Context mContext;
    /**
     * 准备数据
     */
    String[] datas = new String[]{
            .......数据省略
    };


    public GlideRecyclerviewAdapter(Context context) {
        mContext = context;
    }


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemview = View.inflate(mContext, R.layout.item_glide_recyclerview, null);
        return new ViewHolder(itemview);
    }


    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        // 获取当前item数据

        Glide.with(mContext)
                .load(datas[position])
                .placeholder(R.mipmap.ic_launcher) //占位图
                .error(R.mipmap.ic_launcher)  //出错的占位图
                .animate(R.anim.glide_anim)
                .centerCrop()
                .fitCenter()
                .into(holder.image);
    }


    @Override
    public int getItemCount() {
        return datas == null ? 0 :datas.length;
    }


    static class ViewHolder extends RecyclerView.ViewHolder {


        @Bind(R.id.iv_glide_recyclerview)
        ImageView image;


        public ViewHolder(View itemView) {
            super(itemView);


            ButterKnife.bind(this,itemView);
        }
    }
}

这样就实现了,可以再为其设置缩略图等属性。

  • 如何使用glide实现图片的变化?
平时,我们经常会用到图片的变化,裁剪,滤镜等功能,比如说需要设置一个圆形的头像,或者将图片设置成朦胧效果等等,这样,我们就可以使用第二个库实现。

主要通过Glide.with(this).load(uri).bitmap.Transform(new  xxxTransformation).into(imageview);实现。

由于glide图形变换库里提供了很多变换功能,这里列举几个,其他有需要可以去搜一下:

case 1: {//实现图片的遮盖效果
                int width = Utils.dip2px(mContext, 133.33f);
                int height = Utils.dip2px(mContext, 126.33f);
                Glide.with(mContext)
                        .load(R.drawable.check)
                        .override(width, height)
                        .bitmapTransform(new CenterCrop(mContext),
                                new MaskTransformation(mContext, R.drawable.mask_starfish))
                        .into(holder.image);
                break;
            }

case 2://剪裁圆形的图片
                Glide.with(mContext)
                        .load(R.drawable.demo)
                        .bitmapTransform(new CropCircleTransformation(mContext))
                        .into(holder.image);
                break;

case 3://模糊处理
                Glide.with(mContext)
                        .load(R.drawable.check)
                        .bitmapTransform(new BlurTransformation(mContext, 25))
                        .into(holder.image);
                break;

case 4://灰度处理
                Glide.with(mContext)
                        .load(R.drawable.demo)
                        .bitmapTransform(new GrayscaleTransformation(mContext))
                        .into(holder.image);
                break;

以下还有很多就不一一介绍了,有需要就自行谷歌一把好了。

补充:本文仅作学习记录以及供大家参考,有不足和改进指出请提出,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值