Android Open Source - Sketcher-Tab Hue Picker






From Project

Back to project page Sketcher-Tab.

License

The source code is released under:

Apache License

If you think the Android project Sketcher-Tab listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package org.sketchertab.colorpicker;
/*from   ww w . ja  v  a2s.com*/
import android.content.Context;
import android.graphics.*;
import android.graphics.Paint.Style;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class HuePicker extends View implements Picker {
  private static final float PICKER_RADIUS = 4;
  private static final float[] MARGIN = new float[] { 5, 0, 0, 0 };

  private Picker.OnColorChangedListener mListener = null;

  private final int[] mColors;
  private final Paint mColor = new Paint();
  private final Paint mGradient = new Paint(Paint.ANTI_ALIAS_FLAG);
  private final Paint mTrackerPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

  public HuePicker(Context context, AttributeSet attrs) {
    super(context, attrs);
    mColors = new int[] { 0xFFFF0000, 0xFFFF00FF, 0xFF0000FF, 0xFF00FFFF,
        0xFF00FF00, 0xFFFFFF00, 0xFFFF0000 };

    mGradient.setStyle(Paint.Style.FILL);

    float denst = getResources().getDisplayMetrics().density;
    mTrackerPaint.setStrokeWidth(denst);
    mTrackerPaint.setColor(Color.WHITE);
    mTrackerPaint.setStyle(Style.STROKE);
  }

  @Override
  protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);

    Shader s = new LinearGradient(0, 0, 0, h, mColors, null,
        Shader.TileMode.CLAMP);

    mGradient.setShader(s);
    mGradient.setStrokeWidth(w);
  }

  public void setColor(int color) {
    mColor.setColor(color);
        invalidate();
  }

  public void setOnColorChangedListener(Picker.OnColorChangedListener listener) {
    mListener = listener;
  }

  @Override
  protected void onDraw(Canvas canvas) {
    canvas.drawRect(PICKER_RADIUS + MARGIN[0], MARGIN[1], getWidth()
        - PICKER_RADIUS - MARGIN[2], getHeight() - MARGIN[3], mGradient);

    float[] hsv = Utils.color2HSV(mColor.getColor());
    float hue = hsv[0];
    float y = hueToOffset(hue);

    RectF rect = new RectF();
    rect.left = MARGIN[0];
    rect.top = y - PICKER_RADIUS + MARGIN[1];
    rect.right = getWidth() - MARGIN[2];
    rect.bottom = y + PICKER_RADIUS - MARGIN[3];

    canvas.drawRoundRect(rect, PICKER_RADIUS, PICKER_RADIUS, mTrackerPaint);
  }

  private float hueToOffset(float hue) {
    final float height = getHeight();

    return height - (hue * height / 360f);
  }

  @Override
  public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
            case MotionEvent.ACTION_MOVE:
                float y = event.getY() / getHeight();
                setColor(interpColor(mColors, y));

                mListener.colorChanged(mColor.getColor());
                return true;
    }

    return false;
  }

  private int interpColor(int colors[], float unit) {
    if (unit <= 0) {
      return colors[0];
    }
    if (unit >= 1) {
      return colors[colors.length - 1];
    }

    float p = unit * (colors.length - 1);
    int i = (int) p;
    p -= i;

    // now p is just the fractional part [0...1) and i is the index
    int c0 = colors[i];
    int c1 = colors[i + 1];
    int a = ave(Color.alpha(c0), Color.alpha(c1), p);
    int r = ave(Color.red(c0), Color.red(c1), p);
    int g = ave(Color.green(c0), Color.green(c1), p);
    int b = ave(Color.blue(c0), Color.blue(c1), p);

    return Color.argb(a, r, g, b);
  }

  private int ave(int s, int d, float p) {
    return s + java.lang.Math.round(p * (d - s));
  }
}




Java Source Code List

org.sketchertab.AboutDialog.java
org.sketchertab.BrushProperties.java
org.sketchertab.DocumentHistory.java
org.sketchertab.DrawController.java
org.sketchertab.FileHelper.java
org.sketchertab.HistoryItem.java
org.sketchertab.Sketcher.java
org.sketchertab.Style.java
org.sketchertab.SurfaceDiff.java
org.sketchertab.Surface.java
org.sketchertab.colorpicker.HuePicker.java
org.sketchertab.colorpicker.PickerDialog.java
org.sketchertab.colorpicker.Picker.java
org.sketchertab.colorpicker.PreviewView.java
org.sketchertab.colorpicker.SatValPicker.java
org.sketchertab.colorpicker.Utils.java
org.sketchertab.style.CirclesStyle.java
org.sketchertab.style.FurStyle.java
org.sketchertab.style.RibbonStyle.java
org.sketchertab.style.ShadedStyle.java
org.sketchertab.style.SimpleStyle.java
org.sketchertab.style.SketchyStyle.java
org.sketchertab.style.StyleBrush.java
org.sketchertab.style.StylesFactory.java
org.sketchertab.style.WebStyle.java