【问题标题】:Seekbar - tint color changing for all instances of viewSeekbar - 所有视图实例的色调颜色变化
【发布时间】:2020-03-23 12:42:42
【问题描述】:

我有一个搜索栏:

    <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 在每个实例中都发生了变化,拇指在所有实例中都发生了变化。我做错了什么?

感谢和问候

【问题讨论】:

    标签: android seekbar tint


    【解决方案1】:

    发送搜索栏来改变颜色的乐趣是这样的:

    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)
    

    祝你好运……

    【讨论】:

    • 感谢您的回答,但无法正常工作。但我找到了办法。我发布答案
    【解决方案2】:

    似乎为drawable添加色调正在修改该drawable的所有实例(如果有任何意义的话),所以我还添加了“活动”drawable并将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)
    }
    

    我只需要把它弄得更干净,但它现在可以工作了

    【讨论】:

      猜你喜欢
      • 2015-11-16
      • 1970-01-01
      • 1970-01-01
      • 2016-05-19
      • 1970-01-01
      • 2020-07-23
      • 2023-03-08
      • 1970-01-01
      • 2017-04-11
      相关资源
      最近更新 更多