Kotlin - 根据扩展函数参数修改 Picasso 的 RequestCreator
Kotlin - Modifying Picasso's RequestCreator based on extension function arguments
我有 ImageView
class 的扩展函数。我已经实现了一些关于如何根据传递的参数加载图像的逻辑。但是我被困在这里了。
这些 fit()
、centerCrop()
等 return 毕加索的 RequestCreator
,我什至无法构造(它有 package-private 构造函数)以便稍后修改它(基于参数)。
我只是不知道该怎么做。我设法做到这一点的唯一方法就是你在下面看到的(警告:你的眼睛会开始流血)。我找不到 "normal"、"good" 的方法。
所以我问你:我应该如何处理这个问题?
fun ImageView.load(resId: Int, centerCrop: Boolean = true, fit: Boolean = true) {
// Improve this, there must be a better way
if (centerCrop && fit) {
Picasso.get()
.load(resId)
.fit()
.centerCrop()
.into(this)
} else if (centerCrop && !fit) {
Picasso.get()
.load(resId)
.centerCrop()
.into(this)
} else if (!centerCrop && fit) {
Picasso.get()
.load(resId)
.fit()
.into(this)
} else if (!centerCrop && !fit) {
Picasso.get()
.load(resId)
.into(this)
}
}
你可以使用 Kotlins also function:
fun ImageView.load(resId: Int, centerCrop: Boolean = true, fit: Boolean = true) {
Picasso.get()
.load(resId)
.also { if (centerCrop) it.centerCrop() }
.also { if (fit) it.fit() }
.into(this)
}
我有 ImageView
class 的扩展函数。我已经实现了一些关于如何根据传递的参数加载图像的逻辑。但是我被困在这里了。
这些 fit()
、centerCrop()
等 return 毕加索的 RequestCreator
,我什至无法构造(它有 package-private 构造函数)以便稍后修改它(基于参数)。
我只是不知道该怎么做。我设法做到这一点的唯一方法就是你在下面看到的(警告:你的眼睛会开始流血)。我找不到 "normal"、"good" 的方法。
所以我问你:我应该如何处理这个问题?
fun ImageView.load(resId: Int, centerCrop: Boolean = true, fit: Boolean = true) {
// Improve this, there must be a better way
if (centerCrop && fit) {
Picasso.get()
.load(resId)
.fit()
.centerCrop()
.into(this)
} else if (centerCrop && !fit) {
Picasso.get()
.load(resId)
.centerCrop()
.into(this)
} else if (!centerCrop && fit) {
Picasso.get()
.load(resId)
.fit()
.into(this)
} else if (!centerCrop && !fit) {
Picasso.get()
.load(resId)
.into(this)
}
}
你可以使用 Kotlins also function:
fun ImageView.load(resId: Int, centerCrop: Boolean = true, fit: Boolean = true) {
Picasso.get()
.load(resId)
.also { if (centerCrop) it.centerCrop() }
.also { if (fit) it.fit() }
.into(this)
}