@Override
  protected void onDraw(Canvas canvas) {
    // draw the background and color wheel
    canvas.drawBitmap(mBackground, mBackgroundPosition.x, mBackgroundPosition.y, null);
    canvas.drawBitmap(mWheel, mWheelPosition.x, mWheelPosition.y, null);

    // setup paint for the gradient filling
    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setStyle(Paint.Style.FILL);
    paint.setStrokeWidth(2.0f);
    // create a shader that will show the range of brightness settings
    float[] gradientStartColor = new float[3];
    float[] gradientEndColor = new float[3];
    System.arraycopy(mNewColor, 0, gradientStartColor, 0, mNewColor.length);
    System.arraycopy(mNewColor, 0, gradientEndColor, 0, mNewColor.length);
    gradientStartColor[2] = 1.0f;
    gradientEndColor[2] = 0.0f;
    Shader gradientShader =
        new LinearGradient(
            (float) (mWheelPosition.x + mRadius),
            mWheelPosition.y,
            mOuterArcRect.right,
            mWheelPosition.y + mWheel.getHeight(),
            Color.HSVToColor(gradientStartColor),
            Color.HSVToColor(gradientEndColor),
            Shader.TileMode.MIRROR);
    paint.setShader(gradientShader);
    canvas.drawPath(mArcPath, paint);

    drawHSCrosshairs(canvas);
    drawBrightnessIndicator(canvas);
  }
 public HSBColorPickerView(Context context, AttributeSet attrs, int defStyle, int startingColor) {
   super(context, attrs, defStyle);
   mPreviousColor = new float[3];
   mNewColor = new float[3];
   Color.colorToHSV(startingColor, mPreviousColor);
   System.arraycopy(mPreviousColor, 0, mNewColor, 0, mPreviousColor.length);
   mBackground =
       BitmapFactory.decodeResource(getResources(), R.drawable.color_picker_wheel_background);
   mWheel = BitmapFactory.decodeResource(getResources(), R.drawable.color_wheel);
 }
 public void growArray(int oldSize, int newSize) {
   Drawable[] newDrawables = new Drawable[newSize];
   System.arraycopy(mDrawables, 0, newDrawables, 0, oldSize);
   mDrawables = newDrawables;
 }