Kotlin - изменение RequestCreator Пикассо на основе аргументов функции расширения - PullRequest
0 голосов
/ 09 января 2019

У меня есть функция расширения до ImageView класса. Я реализовал некоторую логику о том, как загрузить изображение в соответствии с переданными аргументами. Но здесь я застрял. Эти fit(), centerCrop() и т. Д. Возвращают Пикассо RequestCreator, который я даже не могу построить (у него есть конструктор частного пакета), чтобы изменить его позже (на основе аргументов). Я просто не знаю, как это сделать. Единственный способ, которым мне удалось это сделать, - как вы можете видеть ниже (будьте осторожны: у вас начнут кровоточить глаза). Я не могу найти «нормальный», «хороший» способ сделать это.

Итак, я спрашиваю вас: как мне подходить к этому?

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)
}

}

1 Ответ

0 голосов
/ 09 января 2019

Вы можете использовать Kotlins также функция :

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)
}
...