Я пытаюсь реализовать изменение цвета 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». Если адаптер привязки предоставляет получатель, проверьте, правильно ли аннотирован адаптер и соответствует ли тип параметра.
Есть ли у вас какие-либо опыты в чем-то подобном и вы хотели бы мне помочь?