动态修改 SeekBar 的滑块和进度条颜色

要动态修改 SeekBar 的滑块和进度条颜色,你需要在 Kotlin 代码中进行操作。通过代码可以根据获取到的颜色来修改滑块 (thumb) 和进度条 (progressDrawable) 的颜色。

初步尝试:

// 在你的 Activity 或 Fragment 中
val seekBar = findViewById(R.id.voiceSeek)

// 定义动态颜色值,颜色可以来自资源、主题或计算的颜色
val thumbColor = ContextCompat.getColor(this, R.color.dynamicThumbColor)
val progressColor = ContextCompat.getColor(this, R.color.dynamicProgressColor)

// 动态改变滑块颜色
val thumbDrawable = seekBar.thumb
thumbDrawable.setColorFilter(thumbColor, PorterDuff.Mode.SRC_IN)

// 动态改变进度条颜色
val progressDrawable = seekBar.progressDrawable
val progressLayerList = progressDrawable as LayerDrawable
val progressShape = progressLayerList.findDrawableByLayerId(android.R.id.progress) as GradientDrawable
progressShape.setColor(progressColor)

解释:

  1. 修改滑块颜色:

    • 使用 setColorFilter() 方法为 thumb 设置颜色过滤器,这样可以动态改变滑块颜色。
  2. 修改进度条颜色:

    • 获取 progressDrawable,并将其转换为 LayerDrawable,然后访问其中的 progress 层,使用 setColor() 方法修改其颜色。

注意事项:

  • 你需要为 dynamicThumbColordynamicProgressColor 定义合适的动态颜色,可以是资源文件中的颜色,或者是通过程序计算的颜色值。
  • 这种方法无需修改 XML 布局文件,能够根据运行时的条件动态地改变 SeekBar 的颜色。

以上代码可以先进行尝试,是否起作用,如果没有的可以尝试一下代码:

优化代码:

  //滑动条的颜色主题
        val progressDrawable = voiceSeek.progressDrawable as LayerDrawable
        // 获取当前的 thumb drawable
        val thumbDrawable = voiceSeek.thumb
        thumbDrawable.setColorFilter(Color.parseColor(themeTwo), PorterDuff.Mode.SRC_IN)
        voiceSeek.thumb = thumbDrawable
        // 修改进度条颜色
        val progressItem = progressDrawable.findDrawableByLayerId(android.R.id.progress) as ClipDrawable
        val progressDrawableLayer = progressItem.drawable as GradientDrawable
        progressDrawableLayer.setColor(Color.parseColor(themeTwo))

        val secondaryProgressItem = progressDrawable.findDrawableByLayerId(android.R.id.secondaryProgress) as ClipDrawable
        val secondaryProgressDrawable = secondaryProgressItem.drawable as GradientDrawable
        secondaryProgressDrawable.setColor(Color.parseColor(themeTwo))

以下附以下常见的布局文件

    

thumb.xml



     
     
seek_bar_theme_call.xml



    
        
            
            
            
        
    

    
        
            
                
                
                
            
        
    

    
        
            
                
                
                
            
        
    

通过以上就可以获取一个可以修改颜色的seekbar了,可以尝试一下

你可能感兴趣的:(Android,android)