Seekbar - изменение цвета оттенка для всех видов обзора - PullRequest
0 голосов
/ 23 марта 2020

У меня есть панель поиска:

    <SeekBar
        android:id="@+id/sw_lock"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="60dp"
        android:layout_marginTop="20dp"
        android:layout_marginEnd="60dp"
        android:max="100"
        android:thumb="@drawable/ic_thumb"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/lbl_device_status" />

Я использую привязку данных, и все работает нормально. Проблема возникает, когда я хочу изменить цвет большого пальца.

Во фрагменте у меня есть вертикальный линейный макет, содержащий 0 ... n представлений, которые содержат эту панель поиска

response.observe(viewLifecycleOwner, Observer { list ->

    activity?.run {

        list.forEach { element ->

            val mView = MyView(this)
            mView.layoutParams = ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT
            )
            mView.bind(element)
            mView.didUnlock = { view, unlocked, element ->

                //DO STUFF
            }

            binding.container.addView(mView)
        }
    }
})

Это работает нормально. У меня есть n экземпляров, и каждый экземпляр работает должным образом.

Теперь я хочу изменить цвет большого пальца при изменении прогресса, поэтому у меня есть:

override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {

    changeColor(binding.swLock.progress > 80)
}

и метод changeColor выглядит следующим образом:

private fun changeColor(active: Boolean) {

    val color = if(active) {

        R.color.colorAccent
    } else {

        R.color.text_main
    }

    binding.swLock.progressDrawable.setTint(getColor(color))
    binding.swLock.thumb.setTint(getColor(color))
}

А вот и странная вещь: progressDrawable меняется в каждом случае, большой палец меняется во всех случаях. Что я делаю не так?

Спасибо и всего наилучшего

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

Похоже, что добавление оттенка к рисунку изменяет все экземпляры этого рисунка (если это имеет смысл), поэтому я добавил также «активный» рисунок и изменил функцию changeColor на

private fun changeColor(active: Boolean) {

    val thumb = if(active) {

        R.drawable.ic_thumb_active
    } else {

        R.drawable.ic_thumb
    }
    val color = if(active) {

        R.color.colorAccent
    } else {

        R.color.text_main
    }

    binding.swLock.progressDrawable.setTint(getColor(color))
    binding.swLock.thumb = resources.getDrawable(thumb, null)
}

Я просто должен сделать это чище, но теперь он работает

0 голосов
/ 23 марта 2020

Отправьте панель поиска на changeColor fun следующим образом:

private fun changeColor(active: Boolean, seekBar : SeekBar) {

val color = if(active) {

    R.color.colorAccent
} else {

    R.color.text_main
}
seekBar.thumb.setTint(getColor(color))
}

и вызовите changeColor:

changeColor(binding.swLock.progress > 80, seekBar)

Удачи ...

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