Glide多种组合使用方式

Glide多种组合使用方式,第1张

有时在使用 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使用方式,总有一款适合你

1.在AndroidStudio中导入Library项目 1 启动AndroidStudio后,打开你需要接收Library的项目。比如有两个项目,项目A,和Library项目B,那么打开项目A。图中所示为项目的结构图,点击右上角的File菜单。 2 在下拉菜单中依次找到New— —Import Module,点击打开项目导入窗口。注意导入的是Module而不是Project,如果是Project的话AndroidStudio会自动打开一个新的窗口编辑,那样的话就是不Library了。 3 在打开的窗口中点击右侧的"..."浏览窗口,在文件夹窗口中找到你要导入的Library项目的位置,选择后点击底部的OK按钮导入。 4 导入窗口中显示了该Module(项目)的详细信息,点击Finish完成导入。需要注意的是导入到AndoridStudio项目中的Library也必须是AndroidStudio项目,不能是Eclipse项目,如果是Eclipse项目的话,需要选择导出AndroidStudio项目。 5 在项目首页中选择Project标签,可以看到项目的文件结构图中多出了我们刚才导入的项目。锋搜Library的导入就完成了,接下来的步骤中需要把这个Library项目添加到原项目中,才能正常的引用Librara项目中的内容。 END 2. 把Library项目添加到源项目中 点击顶部左上角的File菜单,在出现的下拉菜单中找到Project Structure,点击进入。 在窗口左侧选择原始的项目后,点击右侧的Dependencies(依赖项)。可以看到项目当前引用的jar包等信息。 点击右侧的“+”添加按钮,在下拉菜单中找到Module Dependency(项目依赖),点击打开项目选择窗口。 选择前面步骤中导入的Library项目后,点击OK按钮导入到原始项目中。 原始项目的依赖项中就出现了导入的Libray项目,这时在项目中就能正确引梁基档用Library项目橡乱中的内容了,点击底部的OK按钮完成添加。 出现是否更新CVS文件的提示窗口的话,点击Yes进行进行更新和确认。 项目进入到Gradle自动构建的环节。构建完成后点击底部的Messages,选中Gradle Build。在里面提示了BUILD SUCCESSFUL,说明项目构建完成。这时Library项目就导入到原始项目完毕,可以在项目中正常引用Library项目中的内容了。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11993445.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-20
下一篇2023-05-20

发表评论

登录后才能评论

评论列表(0条)

    保存