private void chooseColor() { ColorPickerDialogBuilder .with(MainActivity.this) .setTitle(R.string.choose_color) .wheelType(ColorPickerView.WHEEL_TYPE.FLOWER) .initialColor(mColor) //default blue .density(12) .lightnessSliderOnly() .setPositiveButton(android.R.string.ok, new ColorPickerClickListener() { @Override public void onClick(DialogInterface dialog, int selectedColor, Integer[] allColors) { if (selectedColor == Color.WHITE) { Toast.makeText(MainActivity.this, R.string.select_white, Toast.LENGTH_LONG).show(); } else if (Util.calculateColorGrayValue(selectedColor) > COLOR_BRIGHTNESS_THRESHOLD){ Toast.makeText(MainActivity.this, R.string.select_light, Toast.LENGTH_LONG).show(); } mColor = selectedColor; startConvert(true, selectedColor); } }) .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { startConvert(true, Color.BLACK); } }) .showColorEdit(false) .build() .show(); }
private int getStartColor(Integer[] colors) { Integer startColor = getStartOffset(colors); return startColor == null ? Color.WHITE : colors[startColor]; }
public static ColorPickerDialogBuilder with(Context context) { return new ColorPickerDialogBuilder(context); }
@Override protected void onClick() { ColorPickerDialogBuilder builder = ColorPickerDialogBuilder .with(getContext()) .setTitle(pickerTitle) .initialColor(selectedColor) .showBorder(border) .wheelType(wheelType) .density(density) .showColorEdit(pickerColorEdit) .setPositiveButton(pickerButtonOk, new ColorPickerClickListener() { @Override public void onClick(DialogInterface dialog, int selectedColorFromPicker, Integer[] allColors) { setValue(selectedColorFromPicker); } }) .setNegativeButton(pickerButtonCancel, null); if (!alphaSlider && !lightSlider) builder.noSliders(); else if (!alphaSlider) builder.lightnessSliderOnly(); else if (!lightSlider) builder.alphaSliderOnly(); builder .build() .show(); }
.with(context) .setTitle(R.string.color_dialog_title) .initialColor(currentBackgroundColor) .wheelType(ColorPickerView.WHEEL_TYPE.FLOWER) .density(12) .setOnColorChangedListener(new OnColorChangedListener() { @Override public void onColorChanged(int selectedColor) { .setOnColorSelectedListener(new OnColorSelectedListener() { @Override public void onColorSelected(int selectedColor) { .setPositiveButton("ok", new ColorPickerClickListener() { @Override public void onClick(DialogInterface dialog, int selectedColor, Integer[] allColors) { .setNegativeButton("cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { .showColorEdit(true) .setColorEditTextColor(ContextCompat.getColor(SampleActivity.this, android.R.color.holo_blue_bright)) .build() .show();
@Override protected void drawHandle(Canvas canvas, float x, float y) { solid.setColor(color); solid.setAlpha(Math.round(value * 255)); if (showBorder) canvas.drawCircle(x, y, handleRadius, clearingStroke); if (value < 1) { // this fixes the same artifact issue from ColorPickerView // happens when alpha pattern is drawn underneath a circle with the same size clearBitmapCanvas.drawColor(0, PorterDuff.Mode.CLEAR); clearBitmapCanvas.drawCircle(x, y, handleRadius * 0.75f + 4, alphaPatternPaint); clearBitmapCanvas.drawCircle(x, y, handleRadius * 0.75f + 4, solid); clearStroke = PaintBuilder.newPaint().color(0xffffffff).style(Paint.Style.STROKE).stroke(6).xPerMode(PorterDuff.Mode.CLEAR).build(); clearBitmapCanvas.drawCircle(x, y, handleRadius * 0.75f + (clearStroke.getStrokeWidth() / 2), clearStroke); canvas.drawBitmap(clearBitmap, 0, 0, null); } else { canvas.drawCircle(x, y, handleRadius * 0.75f, solid); } }
public AlertDialog build() { Context context = builder.getContext(); colorPickerView.setInitialColors(initialColor, getStartOffset(initialColor)); colorPickerView.setShowBorder(isBorderEnabled); LinearLayout.LayoutParams layoutParamsForLightnessBar = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getDimensionAsPx(context, R.dimen.default_slider_height)); lightnessSlider = new LightnessSlider(context); lightnessSlider.setLayoutParams(layoutParamsForLightnessBar); pickerContainer.addView(lightnessSlider); colorPickerView.setLightnessSlider(lightnessSlider); lightnessSlider.setColor(getStartColor(initialColor)); lightnessSlider.setShowBorder(isBorderEnabled); LinearLayout.LayoutParams layoutParamsForAlphaBar = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getDimensionAsPx(context, R.dimen.default_slider_height)); alphaSlider = new AlphaSlider(context); alphaSlider.setLayoutParams(layoutParamsForAlphaBar); pickerContainer.addView(alphaSlider); colorPickerView.setAlphaSlider(alphaSlider); alphaSlider.setColor(getStartColor(initialColor)); alphaSlider.setShowBorder(isBorderEnabled); colorEdit.setText(Utils.getHexString(getStartColor(initialColor), isAlphaSliderEnabled)); colorPickerView.setColorEdit(colorEdit); colorPickerView.setColorPreview(colorPreview, getStartOffset(initialColor));
private static Bitmap createAlphaBackgroundPattern(int size) { Paint alphaPatternPaint = PaintBuilder.newPaint().build(); Bitmap bm = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(bm); int s = Math.round(size / 2f); for (int i = 0; i < 2; i++) for (int j = 0; j < 2; j++) { if ((i + j) % 2 == 0) alphaPatternPaint.setColor(0xffffffff); else alphaPatternPaint.setColor(0xffd0d0d0); c.drawRect(i * s, j * s, (i + 1) * s, (j + 1) * s, alphaPatternPaint); } return bm; } }
public ColorPickerDialogBuilder wheelType(ColorPickerView.WHEEL_TYPE wheelType) { ColorWheelRenderer renderer = ColorWheelRendererBuilder.getRenderer(wheelType); colorPickerView.setRenderer(renderer); return this; }
@Override protected void createBitmaps() { super.createBitmaps(); alphaPatternPaint.setShader(PaintBuilder.createAlphaPatternShader(barHeight * 2)); clearBitmap = Bitmap.createBitmap(getMeasuredWidth(), getMeasuredHeight(), Bitmap.Config.ARGB_8888); clearBitmapCanvas = new Canvas(clearBitmap); }
public static PaintHolder newPaint() { return new PaintHolder(); }
public static Shader createAlphaPatternShader(int size) { size /= 2; size = Math.max(8, size * 2); return new BitmapShader(createAlphaBackgroundPattern(size), Shader.TileMode.REPEAT, Shader.TileMode.REPEAT); }
private void positiveButtonOnClick(DialogInterface dialog, ColorPickerClickListener onClickListener) { int selectedColor = colorPickerView.getSelectedColor(); Integer[] allColors = colorPickerView.getAllColors(); onClickListener.onClick(dialog, selectedColor, allColors); } }
private ColorPickerDialogBuilder(Context context, int theme) { defaultMargin = getDimensionAsPx(context, R.dimen.default_slider_margin); defaultMarginTop = getDimensionAsPx(context, R.dimen.default_margin_top); builder = new AlertDialog.Builder(context, theme); pickerContainer = new LinearLayout(context); pickerContainer.setOrientation(LinearLayout.VERTICAL); pickerContainer.setGravity(Gravity.CENTER_HORIZONTAL); pickerContainer.setPadding(defaultMargin, defaultMarginTop, defaultMargin, 0); LinearLayout.LayoutParams layoutParamsForColorPickerView = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0); layoutParamsForColorPickerView.weight = 1; colorPickerView = new ColorPickerView(context); pickerContainer.addView(colorPickerView, layoutParamsForColorPickerView); builder.setView(pickerContainer); }
private AlertDialog buildColorPicker() { return ColorPickerDialogBuilder .with(getContext()) .setTitle(mTitle) .initialColor(mColor) .wheelType(ColorPickerView.WHEEL_TYPE.CIRCLE) .density(12) .setPositiveButton("ok", new ColorPickerClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i, Integer[] integers) { setColor(i); if (mListener != null) { mListener.onColorPickerViewSelected(i); } } }) .setNegativeButton("cancel", null) .build(); } }
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawColor(backgroundColor); float maxRadius = canvas.getWidth() / (1f + ColorWheelRenderer.GAP_PERCENTAGE); float size = maxRadius / density / 2; if (colorWheel != null && currentColorCircle != null) { colorWheelFill.setColor(Color.HSVToColor(currentColorCircle.getHsvWithLightness(this.lightness))); colorWheelFill.setAlpha((int) (alpha * 0xff)); // a separate canvas is used to erase an issue with the alpha pattern around the edges // draw circle slightly larger than it needs to be, then erase edges to proper dimensions currentColorCanvas.drawCircle(currentColorCircle.getX(), currentColorCircle.getY(), size + 4, alphaPatternPaint); currentColorCanvas.drawCircle(currentColorCircle.getX(), currentColorCircle.getY(), size + 4, colorWheelFill); selectorStroke = PaintBuilder.newPaint().color(0xffffffff).style(Paint.Style.STROKE).stroke(size * (STROKE_RATIO - 1)).xPerMode(PorterDuff.Mode.CLEAR).build(); if (showBorder) colorWheelCanvas.drawCircle(currentColorCircle.getX(), currentColorCircle.getY(), size + (selectorStroke.getStrokeWidth() / 2f), selectorStroke); canvas.drawBitmap(colorWheel, 0, 0, null); currentColorCanvas.drawCircle(currentColorCircle.getX(), currentColorCircle.getY(), size + (selectorStroke.getStrokeWidth() / 2f), selectorStroke); canvas.drawBitmap(currentColor, 0, 0, null); } }
public static ColorPickerDialogBuilder with(Context context, int theme) { return new ColorPickerDialogBuilder(context, theme); }
private void initWith(Context context, AttributeSet attrs) { final TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ColorPickerPreference); density = typedArray.getInt(R.styleable.ColorPickerPreference_density, 10); initialColor = typedArray.getInt(R.styleable.ColorPickerPreference_initialColor, 0xffffffff); pickerColorEditTextColor = typedArray.getInt(R.styleable.ColorPickerPreference_pickerColorEditTextColor, 0xffffffff); WHEEL_TYPE wheelType = WHEEL_TYPE.indexOf(typedArray.getInt(R.styleable.ColorPickerPreference_wheelType, 0)); ColorWheelRenderer renderer = ColorWheelRendererBuilder.getRenderer(wheelType); alphaSliderViewId = typedArray.getResourceId(R.styleable.ColorPickerPreference_alphaSliderView, 0); lightnessSliderViewId = typedArray.getResourceId(R.styleable.ColorPickerPreference_lightnessSliderView, 0); setRenderer(renderer); setDensity(density); setInitialColor(initialColor, true); typedArray.recycle(); }
private void updateColorWheel() { int width = getMeasuredWidth(); int height = getMeasuredHeight(); if (height < width) width = height; if (width <= 0) return; if (colorWheel == null) { colorWheel = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888); colorWheelCanvas = new Canvas(colorWheel); alphaPatternPaint.setShader(PaintBuilder.createAlphaPatternShader(26)); } if (currentColor == null) { currentColor = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888); currentColorCanvas = new Canvas(currentColor); } drawColorWheel(); invalidate(); }
@Override public void onClick(View v) { ColorPickerDialogBuilder.with(MainActivity.this) .setTitle("Choose color") .wheelType(ColorPickerView.WHEEL_TYPE.CIRCLE) .density(12) .setPositiveButton("OK", new ColorPickerClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i, Integer[] integers) { }).setNegativeButton("CANCEL", null).build().show();