UI Android

//package com.hyperzsoft.utils;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
public class ColorSelectDialog extends Dialog {
  public interface OnColorChangedListener {
    void colorChanged(String key, int color);
  }
  private OnColorChangedListener mListener;
  private int mInitialColor;
  private String mKey;
  
  public static class ColorPickerView extends View {
    private Paint mPaint;
    private float mCurrentHue = 0;
    private final int[] mHueBarColors = new int[258];
    private OnColorChangedListener mListener;
    
    public void setColor(int color) {
    }
    
    public int getColor() {
      return getCurrentMainColor();
    }
    ColorPickerView(Context c, OnColorChangedListener l, int color) {
      super(c);
      mListener = l;
      // Get the current hue from the current color and update the main color field
      float[] hsv = new float[3];
      Color.colorToHSV(color, hsv);
      mCurrentHue = hsv[0];
      // Initialize the colors of the hue slider bar
      int index = 0;
      for (float i=0; i<256; i += 256/42) // Red (#f00) to pink (#f0f)
      {
        mHueBarColors[index] = Color.rgb(255, 0, (int) i);
        index++;
      }
      for (float i=0; i<256; i += 256/42) // Pink (#f0f) to blue (#00f)
      {
        mHueBarColors[index] = Color.rgb(255-(int) i, 0, 255);
        index++;
      }
      for (float i=0; i<256; i += 256/42) // Blue (#00f) to light blue (#0ff)
      {
        mHueBarColors[index] = Color.rgb(0, (int) i, 255);
        index++;
      }
      for (float i=0; i<256; i += 256/42) // Light blue (#0ff) to green (#0f0)
      {
        mHueBarColors[index] = Color.rgb(0, 255, 255-(int) i);
        index++;
      }
      for (float i=0; i<256; i += 256/42) // Green (#0f0) to yellow (#ff0)
      {
        mHueBarColors[index] = Color.rgb((int) i, 255, 0);
        index++;
      }
      for (float i=0; i<256; i += 256/42) // Yellow (#ff0) to red (#f00)
      {
        mHueBarColors[index] = Color.rgb(255, 255-(int) i, 0);
        index++;
      }
      // Initializes the Paint that will draw the View
      mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
      mPaint.setTextAlign(Paint.Align.CENTER);
      mPaint.setTextSize(12);
    }
    // Get the current selected color from the hue bar
    private int getCurrentMainColor()
    {
      int translatedHue = 255-(int)(mCurrentHue*255/360);
      int index = 0;
      for (float i=0; i<256; i += 256/42)
      {
        if (index == translatedHue)
          return Color.rgb(255, 0, (int) i);
        index++;
      }
      for (float i=0; i<256; i += 256/42)
      {
        if (index == translatedHue)
          return Color.rgb(255-(int) i, 0, 255);
        index++;
      }
      for (float i=0; i<256; i += 256/42)
      {
        if (index == translatedHue)
          return Color.rgb(0, (int) i, 255);
        index++;
      }
      for (float i=0; i<256; i += 256/42)
      {
        if (index == translatedHue)
          return Color.rgb(0, 255, 255-(int) i);
        index++;
      }
      for (float i=0; i<256; i += 256/42)
      {
        if (index == translatedHue)
          return Color.rgb((int) i, 255, 0);
        index++;
      }
      for (float i=0; i<256; i += 256/42)
      {
        if (index == translatedHue)
          return Color.rgb(255, 255-(int) i, 0);
        index++;
      }
      return Color.RED;
    }
    @Override
    protected void onDraw(Canvas canvas) {
      int translatedHue = 255-(int)(mCurrentHue*255/360);
      // Display all the colors of the hue bar with lines
      for (int x=0; x<256; x++)
      {
        // If this is not the current selected hue, display the actual color
        if (translatedHue != x)
        {
          mPaint.setColor(mHueBarColors[x]);
          mPaint.setStrokeWidth(2);
        }
        else // else display a slightly larger black line
        {
          mPaint.setColor(Color.BLACK);
          mPaint.setStrokeWidth(3);
        }
        canvas.drawLine((x*2)+10, 0, (x*2)+10, 40, mPaint);
      }
    }
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
      //setMeasuredDimension(276, 60);
      setMeasuredDimension(532, 60);
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
      if (event.getAction() != MotionEvent.ACTION_DOWN) return true;
      float x = event.getX();
      float y = event.getY();
      //the touch event is located in the hue bar
      if (x > 10 && x < 522 && y > 0 && y < 40)
      {
        // Update the main field colors
        mCurrentHue = (255-(x/2))*360/255;
        mListener.colorChanged("", getCurrentMainColor());
        // Force the redraw of the dialog
        invalidate();
      }
      return true;
    }
  }
  
  public ColorSelectDialog(Context context, OnColorChangedListener listener, String key, int initialColor) {
    super(context);
    mListener = listener;
    mKey = key;
    mInitialColor = initialColor;
  }
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    OnColorChangedListener l = new OnColorChangedListener() {
      public void colorChanged(String key, int color) {
        mListener.colorChanged(mKey, color);
        dismiss();
      }
    };
    setContentView(new ColorPickerView(getContext(), l, mInitialColor));
    setTitle("Select Color");
  }
}