public SampleView(Context context) { super(context); setFocusable(true); mPath = new Path(); mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mRect = new Rect(0, 0, 120, 120); mDrawable = new GradientDrawable( GradientDrawable.Orientation.TL_BR, new int[] {0xFFFF0000, 0xFF00FF00, 0xFF0000FF}); mDrawable.setShape(GradientDrawable.RECTANGLE); mDrawable.setGradientRadius((float) (Math.sqrt(2) * 60)); }
static void setCornerRadii(GradientDrawable drawable, float r0, float r1, float r2, float r3) { drawable.setCornerRadii( new float[] { r0, r0, r1, r1, r2, r2, r3, r3 }); }
@Override protected void onBindDialogView(View view) { final ZLColor color = myOption.getValue(); myRedSlider = createSlider(view, R.id.color_red, color.Red, "red"); myGreenSlider = createSlider(view, R.id.color_green, color.Green, "green"); myBlueSlider = createSlider(view, R.id.color_blue, color.Blue, "blue"); final View colorBox = view.findViewById(R.id.color_box); colorBox.setBackgroundDrawable(myPreviewDrawable); myPreviewDrawable.setCornerRadius(7); myPreviewDrawable.setColor(ZLAndroidColorUtil.rgb(color)); final SeekBar.OnSeekBarChangeListener listener = new SeekBar.OnSeekBarChangeListener() { public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { myPreviewDrawable.setColor( Color.rgb( myRedSlider.getProgress(), myGreenSlider.getProgress(), myBlueSlider.getProgress())); myPreviewDrawable.invalidateSelf(); } public void onStartTrackingTouch(SeekBar seekBar) {} public void onStopTrackingTouch(SeekBar seekBar) { myPreviewDrawable.setColor( Color.rgb( myRedSlider.getProgress(), myGreenSlider.getProgress(), myBlueSlider.getProgress())); myPreviewDrawable.invalidateSelf(); } }; myRedSlider.setOnSeekBarChangeListener(listener); myGreenSlider.setOnSeekBarChangeListener(listener); myBlueSlider.setOnSeekBarChangeListener(listener); super.onBindDialogView(view); }
@Override protected void onDraw(Canvas canvas) { mDrawable.setBounds(mRect); float r = 16; canvas.save(); canvas.translate(10, 10); mDrawable.setGradientType(GradientDrawable.LINEAR_GRADIENT); setCornerRadii(mDrawable, r, r, 0, 0); mDrawable.draw(canvas); canvas.restore(); canvas.save(); canvas.translate(10 + mRect.width() + 10, 10); mDrawable.setGradientType(GradientDrawable.RADIAL_GRADIENT); setCornerRadii(mDrawable, 0, 0, r, r); mDrawable.draw(canvas); canvas.restore(); canvas.translate(0, mRect.height() + 10); canvas.save(); canvas.translate(10, 10); mDrawable.setGradientType(GradientDrawable.SWEEP_GRADIENT); setCornerRadii(mDrawable, 0, r, r, 0); mDrawable.draw(canvas); canvas.restore(); canvas.save(); canvas.translate(10 + mRect.width() + 10, 10); mDrawable.setGradientType(GradientDrawable.LINEAR_GRADIENT); setCornerRadii(mDrawable, r, 0, 0, r); mDrawable.draw(canvas); canvas.restore(); canvas.translate(0, mRect.height() + 10); canvas.save(); canvas.translate(10, 10); mDrawable.setGradientType(GradientDrawable.RADIAL_GRADIENT); setCornerRadii(mDrawable, r, 0, r, 0); mDrawable.draw(canvas); canvas.restore(); canvas.save(); canvas.translate(10 + mRect.width() + 10, 10); mDrawable.setGradientType(GradientDrawable.SWEEP_GRADIENT); setCornerRadii(mDrawable, 0, r, 0, r); mDrawable.draw(canvas); canvas.restore(); }