package com.simplecity.amp_library.ui.views; import android.content.Context; import android.graphics.Color; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.widget.EditText; import android.widget.FrameLayout; import android.widget.SeekBar; import android.widget.TextView; import com.simplecity.amp_library.R; import com.simplecity.amp_library.utils.ThemeUtils; public class CustomColorPicker extends FrameLayout implements SeekBar.OnSeekBarChangeListener, TextWatcher { public int color; private View colorView; private SizableSeekBar redSeekBar; private SizableSeekBar greenSeekBar; private SizableSeekBar blueSeekBar; private TextView redValue; private TextView greenValue; private TextView blueValue; private EditText editText; public CustomColorPicker(Context context, int selectedColor) { super(context); color = selectedColor; View customView = LayoutInflater.from(context).inflate(R.layout.dialog_color_custom, this, true); colorView = customView.findViewById(R.id.view); redSeekBar = (SizableSeekBar) findViewById(R.id.seekbarRed); ThemeUtils.themeSeekBar(context, redSeekBar); redSeekBar.setMax(255); redSeekBar.setOnSeekBarChangeListener(this); greenSeekBar = (SizableSeekBar) findViewById(R.id.seekbarGreen); ThemeUtils.themeSeekBar(context, greenSeekBar); greenSeekBar.setMax(255); greenSeekBar.setOnSeekBarChangeListener(this); blueSeekBar = (SizableSeekBar) findViewById(R.id.seekbarBlue); ThemeUtils.themeSeekBar(context, blueSeekBar); blueSeekBar.setMax(255); blueSeekBar.setOnSeekBarChangeListener(this); redValue = (TextView) findViewById(R.id.redValue); greenValue = (TextView) findViewById(R.id.greenValue); blueValue = (TextView) findViewById(R.id.blueValue); editText = (EditText) findViewById(R.id.editText); editText.addTextChangedListener(this); updateView(); setProgress(); setProgressValues(); setText(); } public int getColor() { return color; } private void updateView() { colorView.setBackgroundColor(color); } private void setText() { editText.setText(String.format("%06X", (0xFFFFFF & color))); editText.setSelection(editText.length()); } private void setProgress() { redSeekBar.setProgress(Color.red(color)); greenSeekBar.setProgress(Color.green(color)); blueSeekBar.setProgress(Color.blue(color)); } private void setProgressValues() { redValue.setText(String.valueOf(Color.red(color))); greenValue.setText(String.valueOf(Color.green(color))); blueValue.setText(String.valueOf(Color.blue(color))); } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (fromUser) { color = Color.rgb(redSeekBar.getProgress(), greenSeekBar.getProgress(), blueSeekBar.getProgress()); setProgressValues(); setText(); updateView(); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { try { color = Color.parseColor("#" + s); } catch (IllegalArgumentException ignored) { } updateView(); setProgress(); setProgressValues(); } }