新手的Glide学习之路,提供Glide应用实例demo(手把手教学)

简介:

在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫 Glide 的图片加载库,作者是bumptech。这个库被广泛的运用在google的开源项目中,包括2014年google I/O大会上发布的官方app。

特点:

(1)使用简单

(2)可配置度高,自适应程度高

(3)支持常见图片格式 Jpg png gif webp

(4)支持多种数据源  网络、本地、资源、Assets 等

(5)高效缓存策略    支持Memory和Disk图片缓存 默认Bitmap格式采用RGB_565内存使用至少减少一半

(6)生命周期集成   根据Activity/Fragment生命周期自动管理请求

(7)高效处理Bitmap  使用Bitmap Pool使Bitmap复用,主动调用recycle回收需要回收的Bitmap,减小系统回收压力

下载地址

https://github.com/bumptech/glide

功能介绍:

简单使用:Glide
    .with(this)//传递上下文
    .load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")//网络图片下载地址

    .into(imageView);//下载到目标

Glide.with()的使用:

(1)with(Context context). 

使用Application上下文,Glide请求将不受Activity/Fragment生命周期控制。

(2)with(Activity activity).
使用Activity作为上下文,Glide的请求会受到Activity生命周期控制。

(3)with(FragmentActivity activity).

Glide的请求会受到FragmentActivity生命周期控制。

(4)with(android.app.Fragment fragment).

Glide的请求会受到Fragment 生命周期控制。

(5)with(android.support.v4.app.Fragment fragment).

Glide的请求会受到Fragment生命周期控制。

load()的使用:

(1)Glide基本可以load任何可以拿到的媒体资源

(2)SD卡资源:load("file://"+ Environment.getExternalStorageDirectory().getPath()+"/test.jpg") 

(3)assets资源:load("file:///android_asset/f003.gif") 

(4)raw资源:load("Android.resource://com.frank.glide/raw/raw_1")或load("android.resource://com.frank.glide/raw/"+R.raw.raw_1) 

(5)drawable资源:load("android.resource://com.frank.glide/drawable/news")或load("android.resource://com.frank.glide/drawable/"+R.drawable.news) 

(6)ContentProvider资源:load("content://media/external/images/media/139469") 

(7)http资源:load("http://img.my.csdn.NET/uploads/201508/05/1438760757_3588.jpg") 

(8)https资源:load("https://img.alicdn.com/tps/TB1uyhoMpXXXXcLXVXXXXXXXXXX-476-538.jpg_240x5000q50.jpg_.webp") 

注意:load不限于String类型

还可以是:load(Uri uri),load(File file),load(Integer resourceId),load(URL url),load(byte[] model),load(T model),loadFromMediaStore(Uri uri)。 

4)重要功能:
(1)禁止内存缓存:
.skipMemoryCache(true)
(2)清除内存缓存:
// 必须在UI线程中调用
    Glide.get(context).clearMemory();
(3)禁止磁盘缓存:
.diskCacheStrategy(DiskCacheStrategy.NONE)
(4)清除磁盘缓存:
// 必须在后台线程中调用,建议同时clearMemory()
   Glide.get(applicationContext).clearDiskCache();
(5)获取缓存大小:
new GetDiskCacheSizeTask(textView).execute(new File(getCacheDir(), DiskCache.Factory.DEFAULT_DISK_CACHE_DIR));
(6)指定资源的优先加载顺序:
(7)先显示缩略图,再显示原图:
(8)对图片进行裁剪、模糊、滤镜等处理:
(9)对请求状态进行监听:
(10)对资源的下载进度进行监听: 

使用步骤
1)在build.gradle中添加依赖:
compile 'com.github.bumptech.glide:glide:3.7.0'
2)如果你的项目没有support-v4库,还需要添加support-v4依赖:
compile 'com.android.support:support-v4:23.3.0'
3)如果使用变换,可以添加一个自定义的变换库
github网址:
https://github.com/wasabeef/glide-transformations
添加依赖:
compile 'jp.wasabeef:glide-transformations:2.0.1'
   // If you want to use the GPU Filters

compile 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.3.0'   

例子
1)基本使用

(0)布局

//省略

(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.mipmap.ic_launcher).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 videoPath =Environment.getExternalStorageDirectory()+"/video.mp4";;
File videoFile = new File(videoPath);
Glide.with(this).load(Uri.fromFile(videoFile)).placeholder(R.mipmap.ic_launcher).into(ivGlide7)

(8)设置缩略图比例,然后,先加载缩略图,再加载原图

String urlPath="/storage/emulated/0/meinv1.jpg";
Glide.with(this).load(new File(urlPath)).thumbnail(0.1f).centerCrop().placeholder(R.mipmap.ic_launcher).into(ivGlide8);

(9)先建立一个缩略图对象,然后,先加载缩略图,再加载原图

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);

2)RecyclerView中加载图片(具体实现还是看看Demo好了)
(0)布局
(1)初始化RecyclerView
(2)编写适配器
a)准备数据
b)加载图片
c)加载动画
3)变换
(0)布局
(1)初始化RecyclerView
(2)编写适配器
a)准备数据

b)变换加载图片

这里提供了一些变换实例:

case 1: {
    int width = com.example.myglidetest.Utils.dip2px(mContext,133.33f);
    int height = com.example.myglidetest.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: {
    int width = com.example.myglidetest.Utils.dip2px(mContext, 150.0f);
    int height = com.example.myglidetest.Utils.dip2px(mContext, 100.0f);
    Glide.with(mContext)
            .load(R.drawable.check)
            .override(width, height)
            .bitmapTransform(new CenterCrop(mContext),//从中间开始修剪
                    new MaskTransformation(mContext, R.drawable.mask_chat_right))
            .into(holder.image);
    break;
}
case 3:
    Glide.with(mContext)
            .load(R.drawable.demo)
            .bitmapTransform(
                    new CropTransformation(mContext, 300, 100, CropTransformation.CropType.TOP))//剪切变化参数
            .into(holder.image);
    break;
case 4:
    Glide.with(mContext)
            .load(R.drawable.demo)
            .bitmapTransform(new CropTransformation(mContext, 300, 100))
            .into(holder.image);
    break;
case 5:
    Glide.with(mContext)
            .load(R.drawable.demo)
            .bitmapTransform(
                    new CropTransformation(mContext, 300, 100, CropTransformation.CropType.BOTTOM))
            .into(holder.image);

    break;
case 6:
    Glide.with(mContext)
            .load(R.drawable.demo)
            .bitmapTransform(new CropSquareTransformation(mContext))//方形剪切
            .into(holder.image);
    break;
case 7:
    Glide.with(mContext)
            .load(R.drawable.demo)
            .bitmapTransform(new CropCircleTransformation(mContext))//圆形剪切
            .into(holder.image);
    break;
case 8:
    Glide.with(mContext)
            .load(R.drawable.demo)
            .bitmapTransform(new ColorFilterTransformation(mContext, Color.argb(80, 255, 0, 0)))//滤镜
            .into(holder.image);
    break;
case 9:
    Glide.with(mContext)
            .load(R.drawable.demo)
            .bitmapTransform(new GrayscaleTransformation(mContext))//黑白
            .into(holder.image);
    break;
case 10:
    Glide.with(mContext)
            .load(R.drawable.demo)
            .bitmapTransform(new RoundedCornersTransformation(mContext, 30, 0,
                    RoundedCornersTransformation.CornerType.BOTTOM))//圆角
            .into(holder.image);
    break;
case 11:
    Glide.with(mContext)
            .load(R.drawable.check)
            .bitmapTransform(new BlurTransformation(mContext, 25))//模糊处理
            .into(holder.image);
    break;
case 12:
    Glide.with(mContext)
            .load(R.drawable.demo)
            .bitmapTransform(new ToonFilterTransformation(mContext))//卡通过滤
            .into(holder.image);
    break;
case 13:
    Glide.with(mContext)
            .load(R.drawable.check)
            .bitmapTransform(new SepiaFilterTransformation(mContext))//乌墨色过滤
            .into(holder.image);
    break;
case 14:
    Glide.with(mContext)
            .load(R.drawable.check)
            .bitmapTransform(new ContrastFilterTransformation(mContext, 2.0f))//对比过滤
            .into(holder.image);
    break;
case 15:
    Glide.with(mContext)
            .load(R.drawable.check)
            .bitmapTransform(new InvertFilterTransformation(mContext))//黑白调换
            .into(holder.image);
    break;
case 16:
    Glide.with(mContext)
            .load(R.drawable.check)
            .bitmapTransform(new PixelationFilterTransformation(mContext, 10))//像素过滤器
            .into(holder.image);
    break;
case 17:
    Glide.with(mContext)
            .load(R.drawable.check)
            .bitmapTransform(new SketchFilterTransformation(mContext))//速写过滤
            .into(holder.image);
    break;
case 18:
    Glide.with(mContext)
            .load(R.drawable.check)
            .bitmapTransform(
                    new SwirlFilterTransformation(mContext, 0.5f, 1.0f, new PointF(0.5f, 0.5f)))//旋转过滤
            .into(holder.image);
    break;
case 19:
    Glide.with(mContext)
            .load(R.drawable.check)
            .bitmapTransform(new BrightnessFilterTransformation(mContext, 0.5f))//亮度过滤
            .into(holder.image);
    break;
case 20:
    Glide.with(mContext)
            .load(R.drawable.check)
            .bitmapTransform(new KuwaharaFilterTransformation(mContext, 25))//(Kuwahara滤波器)
            .into(holder.image);
    break;
case 21:
    Glide.with(mContext)
            .load(R.drawable.check)
            .bitmapTransform(new VignetteFilterTransformation(mContext, new PointF(0.5f, 0.5f),//(装饰图滤波器)
                    new float[]{0.0f, 0.0f, 0.0f}, 0f, 0.75f))
            .into(holder.image);
    break;

效果图






实践代码:

https://github.com/zhengwanshi/MyGlideTest

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值