本文已参与「新人创作礼」活动,一起开启掘金创作之路。
ImageRequest¶
ImageRequest是值对象, 提供了ImageLoader加载图片的全部必要信息.
ImageRequest通过使用构建者进行创建:
val request = ImageRequest.Builder(context)
.data("https://www.example.com/image.jpg")
.crossfade(true)
.target(imageView)
.build()
一旦创建了请求, 要将请求传给ImageLoader进行入队/执行:
imageLoader.enqueue(request)
Target¶
Target接收ImageRequest的结果Drawable. 它们经常扮演了"视频适配器"的角色, 将placeholder/error/success这样的drawable应用到View里面(比如ImageViewTarget).
如下是创建自定义Target的最简单方式:
val request = ImageRequest.Builder(context)
.data("https://www.example.com/image.jpg")
.target(
onStart = { placeholder ->
// Handle the placeholder drawable.
},
onSuccess = { result ->
// Handle the successful result.
},
onError = { error ->
// Handle the error drawable.
}
)
.build()
imageLoader.enqueue(request)
Target有2种类型:
- Target: 基础的Target类. 在图片请求没有绑定
View的时候使用. - ViewTarget: 绑定了
View的Target. 在请求在View上设置了placeholder/error/success的Drawable的时候使用.ViewTarget也将请求绑定了View的生命周期.
Transformation¶
Transformations允许你在Drawable从请求返回之前修改图片的像素数据.
默认情况下, Coil打包内置了2个Transformation: circle crop和rounded corners.
Transformation仅仅修改静态图片的像素数据. 将Transformation添加进生成动画图片的ImageRequest会将动画图片转化成静态图片, 由此Transformation才能使用. 要想转化动画图片每一帧的像素数据请查看AnimatedTransformation.
注意
如果图片管道线返回的Drawable不是BitmapDrawable, 那么Drawable将会转化成BitmapDrawable. 这将导致动画Drawable仅仅绘制了动画的首帧. 这个行为可以通过设置ImageRequest.Builder.allowConversionToBitmap(false)来进行禁止.
Transition¶
Transition允许在Target上设置图片请求结果的过程中执行动画.
ImageLoader和ImageRequest构造器接受Transition.Factory. Transition允许你控制success/error的drawable设置在Target上的过程. 这允许你对Target的View执行动画或者封装输入的Drawable.
默认情况下, Coil打包内置了2种Transition:
CrossfadeTransition.Factory将当前Drawable渐变成success/error的drawable.Transition.Factory.NONE在不执行动画的情况下在Target上立即设置drawable.