祝大家新年快乐! 如果您正在阅读本文,则可能意味着该回到了代码编辑器了。 最近,我发现了图像加载库Coil,我想我应该对其进行一些探索并分享我发现的内容。 hem
线圈:是什么?
那么,根据他们的文档线圈表示Co例行我的法师大号 oader,这是一个图像加载库由Kotlin协同程序的支持。 如果您不熟悉Kotlin Coroutines,请不要担心,这些只是轻量级线程。 另外,不需要使用Coroutines就能使用此库,因此我不会深入研究Kotlin Coroutines的复杂细节。
但是我们真的需要另一个图像加载库吗?
您可能想知道我们是否真的需要一个充满Glide和Picasso或Universal Image Loader的世界中的另一个图像加载库- 对于那些已经在Android平台上开发了一段时间的人 😉。 然而,关于线圈,有两件事引起了我的注意:
- 与我选择的图像加载库Glide相比,它的尺寸更小。 和,
- 令人惊讶的是,它非常易于使用。 您将在本文的下半部分看到,该库是非常惯用的,这就是Kotlin的全部用途,而且非常棒。
好吧,我被卖了,下一步呢?
为了在您的项目中使用Coil,您需要使您的项目已经在使用AndroidX。 它还必须使用SDK级别29进行编译以及使用Java 8。
如果满足上述每个条件,则需要在build.gradle
文件中的应用程序级别依赖项中添加以下行,然后才能使用该库:
implementation ( "io.coil-kt:coil:0.9.1" )
这将包括Coil
单例的默认工件。 这样,您就可以在Android应用程序中开始更轻松,更快速的图像加载了。
加载图像
要将图像加载到ImageView
,Coil提供了一个漂亮的扩展函数,称为load()
。
下面是正在使用的库的代码片段:
//Loading from a URL
imageView . load ( "https://via.placeholder.com/600/92c952" )
//Loading from an image drawable
imageView . load ( R . drawable . some_image_placeholder )
// Loading from a file
imageView . load ( File ( "/path/to/some_image_placeholder.png" ))
瓦拉! 真的就是这么简单。 你不能把这个东西编起来!
在后台, load()
函数可以做很多事情。 以从URL加载为例:
- Coil创建一个
RequestDisposable
对象,该对象基本上是负责连接到网络的对象。 - 通过网络请求URL中指定的图像,并将结果加载到
target
。 - 在这种情况下,
ImageView
实例是预期的target
( 因此具有扩展功能的美 )。
让我们探索更多...
在这一点上,您可能想知道如何使该库执行某些操作,例如配置占位符,或者可能应用转换以圆形裁剪图像。
好吧,这真的很容易。 您只需在load()
扩展函数之后将配置添加到尾随lambda中即可。
观察:
//Applying image loading with configurations
imageView . load ( "https://via.placeholder.com/600/92c952" ) {
crossfade ( true )
placeholder ( R . drawable . placeholder_image )
transformations ( CircleCropTransformation ())
}
很简单!。
似乎还不够,Coil支持加载到自定义目标。
使用Coil
单例中的load()
扩展函数,您将得到以下内容:
//Custom targets
Coil . load ( "https://via.placeholder.com/600/92c952" ){
target { drawable ->
//Do something with result e.g apply a filter to greyscale image.
}
}
您甚至可以侦听诸如onSuccess
, onStart
, onError
和onCancel
类的特定事件,但是在本文中我不会涉及这些事件。 如果您想让我进一步深入,可以告诉我。 我将创建一个Coil party技巧 2部分,涉及我可以找到的库的各个方面。
有关转换的更多信息
Coil库提供了4种开箱即用的转换,即
-
BlurTransformation
应用高斯模糊。 -
CircleCropTransformation
并将图像居中成一个圆圈。 -
GrayscaleTransformation
将图像着色为灰度。 -
RoundedCornersTransformation
图像以适合目标尺寸并RoundedCornersTransformation
入图像的角。
其他要注意的酷事😎
关于Coil库,还有一些很酷的注意事项。
- 它对扩展的支持非常广泛,这使开发人员可以在项目中支持更多文件类型,以满足他们的需求。
- 它具有使测试更加容易的功能。 基本上,您可以模拟
ImageLoader
对象的实例,因为它是一个接口。 - 没有注释处理! 这是一个很大的。 这意味着在您使用Glide的情况下,您可以更快地构建项目,您知道这很重要。 他们使用Kotlin的扩展功能功能。
结论
Coil是一个非常漂亮的Android图像加载库。 我与Instacart毫无关系,但是我倡导更简洁的代码,而且我一直都很懒惰。 我会做任何让我的生活更轻松的事情,而Coil就是这样,至少要加载图像!
请继续尝试一下, 甚至可以从当前的图像加载库中迁移。
如果您想了解更多信息,我在下面提供了一些可能对您有用的链接:
请随时在Twitter上关注我。 我一直在讨论。
From: https://dev.to/kudziechase/taking-a-look-at-coil-an-image-loading-library-for-kotlin-on-android-1ndp