Android图片加载框架Glide用法

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

它的成功让我非常感兴趣。我花了一整晚的时间把玩,决定分享一些自己的经验。在开始之前我想说,Glide和Picasso有90%的相似度,准确的说,就是Picasso的克隆版本。但是在细节上还是有不少区别的。

导入

Picasso和Glide都在jcenter上。在项目中添加依赖非常简单:

Picasso

dependencies {  
    compile 'com.squareup.picasso:picasso:2.5.1'  
} 

Glide

    dependencies {  
        compile 'com.github.bumptech.glide:glide:3.5.2'  
        compile 'com.android.support:support-v4:22.0.0'  
    }  

当然现在v4包已经是android项目标配了

Glide的with方法不光接受Context,还接受Activity 和 Fragment,Context会自动的从他们获取。

1.网络加载图片到ImageView中

Glide.with(context).load(imageUrl).into(imageView);

2.当加载网络图片时,由于加载过程中图片未能及时显示,此时可能需要设置等待时的图片,通过placeHolder()方法

Glide.with(context).load(imageUrl).placeholder(R.mipmap.ic_launcher).into(imageView);

3.当加载图片失败时,通过error(Drawable drawable)方法设置加载失败后的图片显示:

Glide.with(context).load(imageUrl).error(R.mipmap.ic_launcher).into(imageView);

4.图片的缩放,centerCrop()和fitCenter(): 
1)使用centerCrop是利用图片图填充ImageView设置的大小,如果ImageView的Height是match_parent则图片就会被拉伸填充

Glide.with(context).load(imageUrl).centerCrop().into(imageView);

2)使用fitCenter即缩放图像让图像都测量出来等于或小于 ImageView 的边界范围,该图像将会完全显示,但可能不会填满整个ImageView。

Glide.with(context).load(imageUrl).fitCenter().into(imageView);

5.显示gif动画,asGif()判断是否是gif动画

Glide.with(context).load(imageUrl).asGif().into(imageView);

6.显示本地视频

String filePath = "/storage/emulated/0/Pictures/example_video.mp4";
Glide.with( context ).load( Uri.fromFile( new File( filePath ) ) ).into(imageViewGifAsBitmap );

7.缓存策略

Glide.with( context ).load(imageUrl).skipMemoryCache(true).into(imageViewInternet );//跳过内存缓存
Glide.with( context ).load(imageUrl).diskCacheStrategy(DiskCacheStrategy.NONE).into( imageViewInternet );//跳过硬盘缓存
  • DiskCacheStrategy.NONE 什么都不缓存
  • DiskCacheStrategy.SOURCE 仅仅只缓存原来的全分辨率的图像
  • DiskCacheStrategy.RESULT 仅仅缓存最终的图像,即降低分辨率后的(或者是转换后的)
  • DiskCacheStrategy.ALL 缓存所有版本的图像(默认行为

8.优先级,设置图片加载的顺序:

 

Glide.with(context).load(imageUrl).priority( Priority.HIGH).into( imageView);

9.获取Bitmap,设置CircleImageVIew可以使用这个ImageView库

复制代码
Glide.with(mContext)
    .load(url) 
    .placeholder(R.drawable.loading_spinner)
    .into(new SimpleTarget<Bitmap>(width, height) {
        @Override 
        public void onResourceReady(Bitmap bitmap, GlideAnimation anim) {
            // setImageBitmap(bitmap) on CircleImageView 
        } 
    };
复制代码

10.加载圆形图片和圆角图片

复制代码
//圆形图片
public class GlideCircleTransform extends BitmapTransformation {
    public GlideCircleTransform(Context context) {
        super(context);
    }

    @Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
        return circleCrop(pool, toTransform);
    }

    private static Bitmap circleCrop(BitmapPool pool, Bitmap source) {
        if (source == null) return null;

        int size = Math.min(source.getWidth(), source.getHeight());
        int x = (source.getWidth() - size) / 2;
        int y = (source.getHeight() - size) / 2;

        // TODO this could be acquired from the pool too
        Bitmap squared = Bitmap.createBitmap(source, x, y, size, size);

        Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888);
        if (result == null) {
            result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
        }

        Canvas canvas = new Canvas(result);
        Paint paint = new Paint();
        paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
        paint.setAntiAlias(true);
        float r = size / 2f;
        canvas.drawCircle(r, r, r, paint);
        return result;
    }

    @Override public String getId() {
        return getClass().getName();
    }
}

    Contact GitHub API Training Shop Blog About 
复制代码

 

复制代码
//圆角图片
public class GlideRoundTransform extends BitmapTransformation {

    private static float radius = 0f;

    public GlideRoundTransform(Context context) {
        this(context, 4);
    }

    public GlideRoundTransform(Context context, int dp) {
        super(context);
        this.radius = Resources.getSystem().getDisplayMetrics().density * dp;
    }

    @Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
        return roundCrop(pool, toTransform);
    }

    private static Bitmap roundCrop(BitmapPool pool, Bitmap source) {
        if (source == null) return null;

        Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
        if (result == null) {
            result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
        }

        Canvas canvas = new Canvas(result);
        Paint paint = new Paint();
        paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
        paint.setAntiAlias(true);
        RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
        canvas.drawRoundRect(rectF, radius, radius, paint);
        return result;
    }

    @Override public String getId() {
        return getClass().getName() + Math.round(radius);
    }
}
复制代码

 

复制代码
Glide.with(this).load("https://www.baidu.com/img/bdlogo.png").transform(new GlideRoundTransform(context)).into(imageView);
Glide.with(this).load("https://www.baidu.com/img/bdlogo.png").transform(new GlideRoundTransform(context, 10)).into(imageView);
Glide.with(this).load("https://www.baidu.com/img/bdlogo.png").transform(new GlideCircleTransform(context)).into(imageView);
复制代码

 

一些使用技巧

1.Glide.with(context).resumeRequests()和 Glide.with(context).pauseRequests()

当列表在滑动的时候,调用pauseRequests()取消请求,滑动停止时,调用resumeRequests()恢复请求。这样是不是会好些呢?

2.Glide.clear()

当你想清除掉所有的图片加载请求时,这个方法可以帮助到你。

3.ListPreloader

如果你想让列表预加载的话,不妨试一下ListPreloader这个类。

一些基于Glide的优秀库

1.glide-transformations

一个基于Glide的transformation库,拥有裁剪,着色,模糊,滤镜等多种转换效果,赞的不行不行的~~

2.GlidePalette

一个可以在Glide加载时很方便使用Palette的库。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Hi! How can I help you with Glide today? I want to download an image using Glide in Android. Can you help me with that? Of course! I'd be happy to help you download an image using Glide in Android. To start, you'll need to add the Glide library to your project. You can do this by adding the following line to your app's build.gradle file: ``` implementation 'com.github.bumptech.glide:glide:4.11.0' ``` Once you've added the library, you can use the following code to download an image: ``` Glide.with(this) .load("https://www.example.com/image.jpg") .into(imageView); ``` Here, `this` refers to the context of your activity, and `imageView` is the ImageView where you want to display the image. Is there anything else I can help with? ### 回答2: Glide是一款适用于Android平台的图片加载框架,能够简化开发者在应用程序中下载和展示图片的工作流程。使用Glide下载图片需要以下几个步骤。 首先,需在项目的build.gradle文件中加入Glide的依赖库。可以通过在`dependencies`模块中添加`implementation 'com.github.bumptech.glide:glide:4.12.0'`来引入最新版的Glide。 接下来,在需要下载和展示图片的地方,需要创建一个Glide请求对象。使用Glide.with()方法,传入当前的`Context`对象,来获取Glide请求管理器。然后,使用`load()`方法指定图片的URL地址或资源id,来创建一个Glide请求对象。 随后,可以使用Glide请求对象中的一系列方法进行配置。比如,可以使用`placeholder()`方法设置一个占位图片,用于在图片加载完成前显示。可以使用`error()`方法设置一个错误图片,在加载失败时显示。还可以使用`override()`方法设置图片的尺寸大小。 然后,可以调用`into()`方法,将要展示图片的ImageView对象作为参数传入,将Glide请求对象与ImageView绑定起来。 最后,需要注意在适当的地方调用`Glide.with(context).pauseRequests()`方法停止请求,以免在Activity或Fragment销毁时发生内存泄漏。同时,可以在应用程序的Application类中调用`Glide.with(context).onTrimMemory()`和`Glide.with(context).onLowMemory()`方法,优化图片加载的性能。 综上所述,通过以上步骤,就可以使用Glide轻松地下载和展示图片,为Android应用程序提供良好的用户体验。 ### 回答3: Android 开发中,使用 Glide 库可以简便地下载和展示图片Glide 是一个强大、灵活、高效的图片加载库,能够帮助 Android 开发者在应用中加载、缓存、展示各种类型的图片。使用 Glide 下载图片非常简单,只需几行代码即可完成。 首先,需要在项目的 build.gradle 文件中添加 Glide 的依赖项。可以在官方网站上找到最新的版本号并添加到 dependencies 部分。 接下来,在代码中使用 Glide 进行图片下载。首先,需要获取一个 ImageView 的实例,用于显示下载的图片。然后,通过调用 Glide 的 with() 方法,传入一个 Context 对象和需要下载的图片 URL,创建一个 GlideRequest 对象。最后,通过调用 GlideRequest 对象的 into() 方法,将下载的图片显示在 ImageView 中。 若需要设置特定的图片大小或占位符,可以使用 GlideRequest 对象的相应方法进行设置。例如,通过调用 override() 方法设置图片大小,调用 placeholder() 方法设置占位符等。 此外,Glide 还提供了许多其他功能,例如本地缓存、内存缓存、动画等。可以根据项目的需求对 Glide 进行更多的配置和使用。 总的来说,使用 Glide 下载图片非常方便。通过简单的几行代码,我们就能够实现图片的下载和展示,同时还可以享受 Glide 强大的额外功能。利用 Glide,我们可以轻松地加载不同来源的图片,并提升应用的性能和用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值