package me.iacn.biliroaming; import android.app.AlertDialog; import android.content.Context; import android.content.pm.PackageManager; import android.graphics.Color; import android.text.Editable; import android.text.TextWatcher; import android.view.View; import android.widget.EditText; import android.widget.SeekBar; import android.widget.TextView; /** * Created by iAcn on 2019/7/14 * Email [email protected] */ public class ColorChooseDialog extends AlertDialog.Builder { private View sampleView; private EditText etColor; private SeekBar sbColorR; private SeekBar sbColorG; private SeekBar sbColorB; private TextView tvColorR; private TextView tvColorG; private TextView tvColorB; public ColorChooseDialog(Context context, int defColor) { super(context); View view = getView(context); if (view == null) return; setView(view); findView(view); setEditTextListener(); setSeekBarListener(); updateValue(defColor); etColor.setText(String.format("%06X", 0xFFFFFF & defColor)); setTitle("自选颜色"); setNegativeButton("取消", null); } public int getColor() { return Color.rgb(sbColorR.getProgress(), sbColorG.getProgress(), sbColorB.getProgress()); } private View getView(Context context) { try { Context moduleContext = context.createPackageContext(BuildConfig.APPLICATION_ID, Context.CONTEXT_IGNORE_SECURITY); return View.inflate(moduleContext, R.layout.dialog_color_choose, null); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); return null; } } private void findView(View view) { sampleView = view.findViewById(R.id.view_sample); etColor = view.findViewById(R.id.et_color); sbColorR = view.findViewById(R.id.sb_colorR); sbColorG = view.findViewById(R.id.sb_colorG); sbColorB = view.findViewById(R.id.sb_colorB); tvColorR = view.findViewById(R.id.tv_colorR); tvColorG = view.findViewById(R.id.tv_colorG); tvColorB = view.findViewById(R.id.tv_colorB); } private void setEditTextListener() { etColor.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { updateValue(handleUnknownColor(s.toString())); } @Override public void afterTextChanged(Editable s) { } }); } private void setSeekBarListener() { SeekBar.OnSeekBarChangeListener listener = new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (fromUser) { int color = Color.rgb( sbColorR.getProgress(), sbColorG.getProgress(), sbColorB.getProgress()); etColor.setText(String.format("%06X", 0xFFFFFF & color)); } tvColorR.setText(String.valueOf(sbColorR.getProgress())); tvColorG.setText(String.valueOf(sbColorG.getProgress())); tvColorB.setText(String.valueOf(sbColorB.getProgress())); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }; sbColorR.setOnSeekBarChangeListener(listener); sbColorG.setOnSeekBarChangeListener(listener); sbColorB.setOnSeekBarChangeListener(listener); } private void updateValue(int color) { sampleView.setBackgroundColor(color); int progressR = Color.red(color); int progressG = Color.green(color); int progressB = Color.blue(color); sbColorR.setProgress(progressR); sbColorG.setProgress(progressG); sbColorB.setProgress(progressB); tvColorR.setText(String.valueOf(progressR)); tvColorG.setText(String.valueOf(progressG)); tvColorB.setText(String.valueOf(progressB)); } private int handleUnknownColor(String color) { try { return Color.parseColor("#" + color); } catch (IllegalArgumentException e) { return Color.BLACK; } } }