1. > 电脑手机 >

glide使用(glide使用教程)

本文目录一览:

Glide 老版本使用

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

1.使用Glide结合列表的样式进行图片加载:

@Override

public View getView(int position, View convertView, ViewGroup parent) {

if (null == convertView) {

//.....

}

Glide

.with(context)

.load(imageUrls[position])

.into(holder.imageView);

return convertView;

}

@Override

public void onBindViewHolder(RVViewHolder holder, int position) {

Glide.with(MainActivity.this)

.load(args[position])

.into(holder.imageView);

}

Glide

.with(context)

.load(UsageExampleListViewAdapter.eatFoodyImages[0])

.placeholder(R.mipmap.ic_launcher) // can also be a drawable

.into(imageViewPlaceholder);

Glide

.with(context)

.load(" ")

.error(R.mipmap.future_studio_launcher) // will be displayed if the image cannot be loaded

.into(imageViewError);

//使用centerCrop是利用图片图填充ImageView设置的大小,如果ImageView的

//Height是match_parent则图片就会被拉伸填充

Glide.with(MainActivity.this)

.load(args[position])

.centerCrop()

.into(holder.imageView);

//使用fitCenter即缩放图像让图像都测量出来等于或小于 ImageView 的边界范围

//该图像将会完全显示,但可能不会填满整个 ImageView。

Glide.with(MainActivity.this)

.load(args[position])

.fitCenter()

.into(holder.imageView);

Glide

.with( context )

.load( gifUrl )

.asGif() //判断加载的url资源是否为gif格式的资源

.error( R.drawable.full_cake )

.into( imageViewGif );

String filePath = "/storage/emulated/0/Pictures/example_video.mp4";

Glide

.with( context )

.load( Uri.fromFile( new File( filePath ) ) )

.into( imageViewGifAsBitmap );

Glide

.with( context )

.load( Images[0] )

.skipMemoryCache( true ) //跳过内存缓存

.into( imageViewInternet );

Glide

.with( context )

.load( images[0] )

.diskCacheStrategy( DiskCacheStrategy.NONE ) //跳过硬盘缓存

.into( imageViewInternet );

DiskCacheStrategy.NONE 什么都不缓存

DiskCacheStrategy.SOURCE 仅仅只缓存原来的全分辨率的图像

DiskCacheStrategy.RESULT 仅仅缓存最终的图像,即降低分辨率后的(或者是转换后的)

DiskCacheStrategy.ALL 缓存所有版本的图像(默认行为)

Priority.LOW

Priority.NORMAL

Priority.HIGH

Priority.IMMEDIATE

private void loadImageWithHighPriority() {

Glide

.with( context )

.load( mages[0] )

.priority( Priority.HIGH )

.into( imageViewHero );

}

private void loadImagesWithLowPriority() {

Glide

.with( context )

.load( images[1] )

.priority( Priority.LOW )

.into( imageViewLowPrioLeft );

Glide

.with( context )

.load( images[2] )

.priority( Priority.LOW )

.into( imageViewLowPrioRight );

}

//括号中的300,600代表宽和高但是未有作用

SimpleTarget target = new SimpleTargetBitmap(300,600) {

@Override

public void onResourceReady(Bitmap resource, GlideAnimation? super Bitmap glideAnimation) {

holder.imageView.setImageBitmap(resource);

}

};

Glide.with(MainActivity.this)

.load(args[position])

.asBitmap()

.into(target);

dependencies {

// your other dependencies

// ...

// Glide

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

// Glide's OkHttp Integration

compile ' com.github.bumptech.glide:okhttp-integration:1.3.1@aar'

compile 'com.squareup.okhttp:okhttp:2.5.0'

}

dependencies {

// your other dependencies

// ...

// Glide

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

// Glide's Volley Integration

compile ' com.github.bumptech.glide:volley-integration:1.3.1@aar'

compile 'com.mcxiaoke.volley:library:1.0.8'

}

Glide图片加载的用法介绍和三级缓存实现

Glide库是用来实现图片加载的框架,功能强大且易使用,深受大家喜爱。

为啥要做缓存? android默认给每个应用只分配16M的内存,所以如果加载过多的图片,为了 防止内存溢出 ,应该将图片缓存起来。

图片的三级缓存分别是:

1、内存缓存

2、本地缓存

3、网络缓存

其中,内存缓存应优先加载,它速度最快;本地缓存次优先加载,它速度也快;网络缓存不应该优先加载,它走网络,速度慢且耗流量。

最优-优先级:内存缓存 本地缓存 网络缓存

两个方法实现:根据图片的url去加载图片、在本地和内存中缓存

两个方法实现:设置本地缓存,以及获取本地缓存

两个方法实现:设置内存缓存,获取内存缓存。

如果使用hashmap去存储图片时,当图片越来越多,那么会造成内存溢出,因为是强引用(对于强引用的系统不会回收)

如果改成软引用softReference,在android 2.3 以上的系统,对象会被提前回收。

可以用LruCache来解决上述内存不回收或提前回收的问题。least recentlly use 最少最近使用算法 它会将内存控制在一定的大小内, 超出最大值时会自动回收, 这个最大值开发者自己定。(这个东西没有用过..)

参考链接:

Glide多种组合使用方式

有时在使用 RecyclerView时,View 可能被重用且保持了前一个位置的尺寸,但在当前位置会发生改变。为了处理这种场景,你可以创建一个新的 ViewTarget 并为 waitForLayout() 方法传入 true:

当你完成了对资源(Bitmap,Drawable 等)的使用时,及时清理(clear)你创建的这些 Target 是一个好的实践。即使你认为你的请求已经完成了,也应该使用 clear() 以使 Glide 可以重用被这次加载使用的任何资源 (特别是 Bitmap )。未调用 clear() 会浪费 CPU 和 内存 , 阻塞更重要的加载 ,甚至如果你在同一个 surface (View, Notification, RPC 等) 上有两个 Target,可能会引发图片显示错误。对于像 SimpleTarget这种无法从一个新实例里跟踪前一个请求的 Target 来说,及时清理尤为重要。

如果你加载的是 Bitmap 或 GifDrawable,你可以判断这个可绘制对象是否实现了 Animatable:

Android中的动画代价是比较大的,尤其是同时开始大量动画的时候。 交叉淡入和其他涉及 alpha 变化的动画显得尤其昂贵。 此外, 动画通常比图片解码本身还要耗时。在列表和网格中滥用动画可能会让图像的加载显得缓慢而卡顿 。为了提升性能,请在使用 Glide 向 ListView , GridView, 或 RecyclerView 加载图片时考虑避免使用动画,尤其是大多数情况下,你希望图片被尽快缓存和加载的时候。作为替代方案,请考虑预加载,这样当用户滑动到具体的 item 的时候,图片已经在内存中了。

虽然禁用交叉淡入通常是一个比较好的默认行为,当待加载的图片包含透明像素时仍然可能造成问题。当占位符比实际加载的图片要大,或者图片部分为透明时,禁用交叉淡入会导致动画完成后占位符在图片后面仍然可见。如果你在加载透明图片时使用了占位符,你可以启用交叉淡入,具体办法是调整 DrawableCrossFadeFactory 里的参数并将结果传到 transition() 中:

以前屏幕比较小,列表图片和一些图片加载展现的尺寸不大,所以就算有图片叠加问题不留意也看不出来。

但是最近的网络电视流行。图片加载尺寸越来越大这个问题就有可能比较严重了。 尤其进行TV开发者留意

应用程序(Applications)如果希望使用集成库和/或 Glide 的 API 扩展,则需要:

恰当地添加一个 AppGlideModule 实现。

(可选)添加一个或多个 LibraryGlideModule 实现。

给上述两种实现添加 @GlideModule 注解。

添加对 Glide 的注解解析器的依赖。

在 proguard 中,添加对 AppGlideModules 的 keep 。

程序库如果需要注册定制组件,例如 ModelLoader,可按以下步骤执行:

添加一个或多个 LibraryGlideModule 实现,以注册新的组件。

为每个 LibraryGlideModule 实现,添加 @GlideModule 注解。

添加 Glide 的注解处理器的依赖。

一个 [LibraryGlideModule] 的例子,在 Glide 的OkHttp 集成库 中:

程序库一定 不要 包含 AppGlideModule 实现。这么做将会阻止依赖该库的任何应用程序管理它们的依赖,或配置诸如 Glide 缓存大小和位置之类的选项。

此外,如果两个程序库都包含 AppGlideModule,应用程序将无法在同时依赖两个库的情况下通过编译,而不得不在二者之中做出取舍。

这确实意味着程序库将无法使用 Glide 的 generated API,但是使标准的 RequestBuilder 和 RequestOptions 加载仍然有效(可以在 选项 页找到例子)

应用程序可能依赖多个程序库,而它们每一个都可能包含一个或更多的 LibraryGlideModules 。在极端情况下,这些 LibraryGlideModules 可能定义了相互冲突的选项,或者包含了应用程序希望避免的行为。应用程序可以通过给他们的 AppGlideModule 添加一个 @Excludes 注解来解决这种冲突,或避免不需要的依赖。

例如,如果你依赖了一个库,它有一个 LibraryGlideModule 叫做com.example.unwanted.GlideModule,而你不想要它:

你也可以排除多个模块:

某些情形下,你可能希望只要图片不在缓存中则加载直接失败(比如省流量模式)。如果要完成这个目标,你可以在单个请求的基础上使用 onlyRetrieveFromCache 方法:

如果图片在内存缓存或在磁盘缓存中,它会被展示出来。否则只要这个选项被设置为 true ,这次加载会视同失败。

如果你想确保一个特定的请求跳过磁盘和/或内存缓存(比如,图片验证码 ),Glide 也提供了一些替代方案。

仅跳过内存缓存,请使用 skipMemoryCache() :

仅跳过磁盘缓存,请使用 DiskCacheStrategy.NONE :

这两个选项可以同时使用:

//源码使用方式一

//用法二

//三

//4

//5

//6

//7

//8

//9

//10

//11

//12

//13

//14

//15

//16

//17

//18

//19

//20

//21

//22

//23

//24

//25

丰富的gilde使用方式,总有一款适合你

Glide使用过程中遇到的坑

加载网络图片时第一次加载死活加载不出来,头像控件使用的是CircleImageView,最后换成ImageView试验,发现没有问题,这就找出问题所在了,就是CircleImageView这个控件和Glide之间的关系了。

查找相关资料后,找出问题所在以及解决方案如下:

1、使用Glide默认没有圆角转换的功能,需要使用自定义Transformation,但无法实现placeholder图片的圆角转换,但是圆角图片,使用CircleImageView,虽然CircleImageView继承ImageView,不能使用scaleType参数,否则报InflateException。CircleImageView 源码主动抛出的异常。

2、问题出现的原因就是使用自定义ImageView,如CircleImageView,通过Glide加载网络图片,且设置了占位符,如placeholder或error,则第一次不显示网络图片

3、解决办法有两种,一种是不使用占位符,另外一种则是不使用默认动画。

public static void glide(Activity activity, String imageUrl, ImageView imageView) {

Glide.with(activity)

.load(imageUrl)

.dontAnimate()

.placeholder(R.mipmap.zhan_course_new)

.error(R.mipmap.zhan_course_new)

.diskCacheStrategy(ALL)

.into(imageView);

}

public static void glide(Activity activity, String imageUrl, ImageView imageView) {

Glide.with(activity)

.load(imageUrl)

.error(R.mipmap.zhan_course_new)

.diskCacheStrategy(ALL)

.into(imageView);

}

Glide基础用法加缓存

这篇文章给大家介绍下android目前使用比较广泛的一个图片缓存库—Glide,这个库是google的一位开发人员在github上的一个开源项目。目前google的一些官方应用都在使用它,所以你现在就开始放心的用吧。

github地址

Glide基础用法加缓存

添加Glide

在module的build.gradle中添加以下依赖:

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

/** 250 MB of cache. */

int DEFAULT_DISK_CACHE_SIZE = 250 * 1024 * 1024;

Glide.get(this).clearMemory();

Glide.get(MainActivity.this).clearDiskCache();

public class WangGlideModule implements GlideModule {

}

application

...

/application

public class WangGlideModule implements GlideModule {

}

public class WangGlideModule implements GlideModule {

}

public class WangGlideModule implements GlideModule {

}

public class WangGlideModule implements GlideModule {

}

public class WangGlideModule implements GlideModule {

}

public class WangGlideModule implements GlideModule {

}

public class WangGlideModule implements GlideModule {

运行后手机文件夹里面多出来一个GlideDisk文件夹,这个就是磁盘缓存的目录

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, website.service08@gmail.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息