12.1-Glide使用

Glide 4概述

Glide,一个被google所推荐的图片加载库,作者是bumptech。这个库被广泛运用在google的开源项目中,包括2014年的google I/O大会上发布的官方app。(PS:众所周知的简介就到此为止了)

Glide 对于 Android SDK 的最低要求是 API level 10

Glide滑行的意思,可以看出这个库的主旨就在于让图片加载变的流畅。现在被广泛使用,当然还是有很多开发者使用Square公司的picasso.

基本使用

要想使用Glide,首先需要将这个库引入到我们的项目当中。新建一个 Test项目,然后在app/build.gradle文件当中添加如下依赖:

依赖

implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'

还得在AndroidManifest.xml中声明一下网络权限才行:

<uses-permission android:name="android.permission.INTERNET" />

加载图片

现在我们就来尝试一下如何使用Glide来加载图片吧。注意:该方法要在主线程里执行调用。

Glide.with(this).load(url).into(imageView);

参数:

  • this:上下文环境
  • url:图片地址
  • imageView 图片控件

更多加载图片

// 加载本地图片
File file = new File(getExternalCacheDir() + "/image.jpg");
Glide.with(this).load(file).into(imageView);
 
// 加载应用资源
int resource = R.drawable.image;
Glide.with(this).load(resource).into(imageView);

// 加载二进制流
byte[] image = getImageBytes();
Glide.with(this).load(image).into(imageView);

 
// 加载Uri对象 
Uri imageUri = getImageUri();
Glide.with(this).load(imageUri).into(imageView);

中级用法:

RequestOptions mRequestOptions = RequestOptions.circleCropTransform()

	.fitCenter() // ScaleType 看下面解释

	.placeholder(R.drawable.ic_launcher_background)//占位图--加载中显示的图片

	.error(R.drawable.ic_launcher_foreground)// 错误后显示的图片

	.skipMemoryCache(true);//不做内存缓存

Glide.with(this)

	.load(imgUrl)

	.apply(mRequestOptions)// 应用配置

	.listener(new RequestListener<Drawable>() { // 监听器

	@Override
	public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {

	// 加载失败

	return false;

}

	@Override
	public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, 		DataSource dataSource, boolean isFirstResource) {

	// 加载完成

	return false;

	}

	})

	.into(mImg1);
 

加载带有占位图

Glide.with(this).load(url).placeholder(R.drawable.loading).into(imageView);

加载失败 放置占位符

Glide.with(this).load(url)
	.placeholder(R.drawable.loading)
	.error(R.drawable.error)
    .diskCacheStrategy(DiskCacheStrategy.NONE)//关闭Glide的硬盘缓存机制
    .into(imageView);

加载静止图片,默认方式

Glide.with(this).load(url)
	.asBitmap()//只加载静态图片,如果是gif图片则只加载第一帧。
	.placeholder(R.drawable.loading).into(imageView);

加载动态图片

Glide.with(this).load(url)
	 .asGif()//加载动态图片,若现有图片为非gif图片,则直接加载错误占位图。
	.placeholder(R.drawable.loading).into(imageView);

加载指定大小的图片

Glide.with(this).load(url)
   .override(100, 100)//指定图片大小
  .placeholder(R.drawable.loading).into(imageView);

添加图片的加载监听器

Glide.with(this)
	.load(imgUrl)
	.listener(new RequestListener<Drawable>() { // 监听器
	@Override
	public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
	// 加载失败
		return false;
	}
	@Override
	public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, 		DataSource dataSource, boolean isFirstResource) {
	// 加载完成
			return false;
		}
	})
	.into(mImg1);

图片的ScaleType

     RequestOptions requestOptions = new RequestOptions()
                .centerCrop()  // ScaleType  看下面
                .diskCacheStrategy(DiskCacheStrategy.NONE)
                .skipMemoryCache(true);//不做内存缓存

  • CENTER 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示
  • CENTER_CROP 按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽
  • CENTER_INSIDE 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽
  • FIT_CENTER 把图片按比例扩大/缩小到View的宽度,居中显示
  • FIT_XY 不按比例缩放图片,目标是把图片塞满整个View。

DiskCacheStrategy

DiskCacheStrategy.NONE: 表示不缓存任何内容。
DiskCacheStrategy.DATA: 表示只缓存原始图片。
DiskCacheStrategy.RESOURCE: 表示只缓存转换过后的图片。
DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。
DiskCacheStrategy.AUTOMATIC: 表示让Glide根据图片资源智能地选择使用哪一种缓存策略(默认选项)。

圆角用法

  /**
     * 圆角图片
     */
    public void cornersCleImg() {
        //设置图片圆角角度
        //通过RequestOptions扩展功能,override:采样率,因为ImageView就这么大,可以压缩图片,降低内存消耗
        RoundedCorners roundedCorners = new RoundedCorners(50);

        RequestOptions options = RequestOptions.bitmapTransform(roundedCorners)
                .override(300, 300);// 指定图片大小 Target.SIZE_ORIGINAL原始尺寸大小

        Glide.with(this)
                .load(url)
                .apply(options)
                .into(mImage2);
    }

RoundedCorners 构造器里50,代表圆角半径
override: 指定图片的宽高

圆形图片

     /**
     * 圆形图片
     * ScaleType
     */
    public void cirCleImg() {

        RequestOptions mRequestOptions = RequestOptions.circleCropTransform();

        Glide.with(this)
                .load(url)
                .apply(mRequestOptions)
                .into(mImage3);

    }
发布了118 篇原创文章 · 获赞 16 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/chentaishan/article/details/104876527
今日推荐