Изменить цвет ImageView с помощью двусторонней привязки данных - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь реализовать изменение цвета ImageView с помощью двусторонней привязки данных. Я хотел бы получить тот же результат, что и при записи android: src = "# AAAAAA" .

Моя ViewModel:

class TeamsViewModel(application: Application) : BaseViewModel(application) {

    val teamOneName: MutableLiveData<String> = MutableLiveData("Team One")
    val teamOneColor: MutableLiveData<Int> = MutableLiveData()

    val teamTwoName: MutableLiveData<String> = MutableLiveData("Team Two")
    val teamTwoColor: MutableLiveData<Int> = MutableLiveData()
}

Мой XML:

<de.hdodenhof.circleimageview.CircleImageView
        android:id="@+id/teamOneColorImageView"
        android:layout_width="32dp"
        android:layout_height="32dp"
        android:src="@={viewModel.teamOneColor}" />

Я не знаю точно, как реализовать изменение цвета. Я пробовал это:

object DataBindingAdapter {

    @JvmStatic
    @InverseBindingAdapter(attribute = "android:src")
    fun ImageView.getColor(): Int {
        val colorDrawable = this.drawable as ColorDrawable
        return colorDrawable.color
    }

    @JvmStatic
    @BindingAdapter("android:src")
    fun ImageView.setColorx(color: Int?) {
        val colorValue = color ?: Color.RED
        val colorDrawable = ColorDrawable(colorValue)
        this.setImageDrawable(colorDrawable)
    }
}

Но я получаю эту ошибку:

Не удалось найти событие 'android: srcAttrChanged' в типе представления 'de.hdodenhof.circleimageview.CircleImageView'

Затем я провел исследование и попробовал это:

object DataBindingAdapter {

    @JvmStatic
    @InverseBindingAdapter(attribute = "android:srcAttrChanged")
    fun ImageView.getColorx(): Int {
        val colorDrawable = this.drawable as ColorDrawable
        return colorDrawable.color
    }

    @JvmStatic
    @BindingAdapter("android:srcAttrChanged")
    fun ImageView.setColor(color: Int?) {
        val colorValue = color ?: Color.RED
        val colorDrawable = ColorDrawable(colorValue)
        this.setImageDrawable(colorDrawable)
    }

    @JvmStatic
    @BindingConversion
    fun convertColorToDrawable(color: Int): ColorDrawable? {
        return if (color != 0) ColorDrawable(color) else null
    }

    @JvmStatic
    @BindingConversion
    fun convertDrawableToColor(drawable: Drawable): Int {
        return (drawable as ColorDrawable).color
    }
}

Снова ошибка:

Не удается найти метод получения для этого параметра, принимающеговведите «java.lang.Integer». Если адаптер привязки предоставляет получатель, проверьте, правильно ли аннотирован адаптер и соответствует ли тип параметра.

Есть ли у вас какие-либо опыты в чем-то подобном и вы хотели бы мне помочь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...