一个滑块可变色的Seekbar

因项目需要,做一个如下图的滑动条,要求如下:

1、滑块跟着进度条改变颜色

2、滑块有白色边和内部颜色组成

一个滑块可变色的Seekbar_第1张图片

大体思路,就是背景需要UI按照需求提供,然后变色时,根据滑动回调动态设置对应的颜色。

直接上代码

xml里面的布局

                

使用到的style

    

如果想让进度条有背景和进度两个滑动条,可以给progressDrawable添加一个layer-list即可




    

    

滑块分层我是使用了atmosphere_thumb_bg用到了layer-list




    

    

seekbar_thumb_out如下:



    
    

    
    

    
    




seekbar_thumb_in如下:



    

    

以上都是布局,要想动态显示还是有如下java代码:

给seekbar注册监听

    //SeekBar回调
    private SeekBar.OnSeekBarChangeListener seekChangeListener = new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            if (fromUser) {
                switch (seekBar.getId()) {
                    case R.id.atmosphere_lamp_progress_color_seekbar://氛围灯颜色
                        LogUtils.d(TAG, "无极调色 == " + progress);
                        setThumbColor(seekBar, progress + 1, 255);
                        break;
                    default:
                        break;

                }
            }
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            switch (seekBar.getId()) {
                case R.id.atmosphere_lamp_progress_color_seekbar:
                    LogUtils.i(TAG, "氛围灯———颜色 抬手 == " + lampBrightnessValue);
                    break;
                default:
                    break;
            }
        }
    };

封装的setThumbColor设置动态颜色

    //设置无极变色滑块颜色
    private void setThumbColor(SeekBar seekBar, int value, int alphaValue) {
        LayerDrawable layerDrawable = (LayerDrawable) seekBar.getThumb();
        GradientDrawable gradientDrawable = (GradientDrawable) layerDrawable.getDrawable(1);
        GradientDrawable gradientDrawable0 = (GradientDrawable) layerDrawable.getDrawable(0);
        gradientDrawable.setColor(Myapplication.getApplication().getResources().getColor(atmosphereLampHelp.valueToColor(value), null));
        gradientDrawable.setAlpha(alphaValue);
        gradientDrawable0.setAlpha(alphaValue);
    }

里面的颜色值,可以按照自己要求一一对应即可。

你可能感兴趣的:(gitee)