@Override
  public boolean onTouchEvent(MotionEvent event) {
    boolean update = false;
    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        mStartTouchPoint = new Point((int) event.getX(), (int) event.getY());
        update = moveTrackersIfNeeded(event);
        break;
      case MotionEvent.ACTION_MOVE:
        update = moveTrackersIfNeeded(event);
        break;
      case MotionEvent.ACTION_UP:
        mStartTouchPoint = null;
        update = moveTrackersIfNeeded(event);
        break;
    }

    if (update) {
      if (mListener != null) {
        mListener.onColorChanged(Color.HSVToColor(mAlpha, new float[] {mHue, mSat, mVal}));
      }

      invalidate();
      return true;
    }

    return super.onTouchEvent(event);
  }
  @Override
  public boolean onTrackballEvent(MotionEvent event) {
    float x = event.getX();
    float y = event.getY();

    boolean update = false;

    if (event.getAction() == MotionEvent.ACTION_MOVE) {
      switch (mLastTouchedPanel) {
        case PANEL_SAT_VAL:
          float sat, val;

          sat = mSat + x / 50f;
          val = mVal - y / 50f;

          if (sat < 0f) {
            sat = 0f;
          } else if (sat > 1f) {
            sat = 1f;
          }

          if (val < 0f) {
            val = 0f;
          } else if (val > 1f) {
            val = 1f;
          }

          mSat = sat;
          mVal = val;
          update = true;
          break;
        case PANEL_HUE:
          float hue = mHue - y * 10f;

          if (hue < 0f) {
            hue = 0f;
          } else if (hue > 360f) {
            hue = 360f;
          }

          mHue = hue;
          update = true;
          break;
      }
    }

    if (update) {
      if (mListener != null) {
        mListener.onColorChanged(Color.HSVToColor(mAlpha, new float[] {mHue, mSat, mVal}));
      }

      invalidate();
      return true;
    }

    return super.onTrackballEvent(event);
  }
 @Override
 public void onClick(View v) {
   if (v.getId() == R.id.new_color_panel) {
     if (mListener != null) {
       mListener.onColorChanged(mNewColor.getColor());
     }
   }
   dismiss();
 }
示例#4
0
 /**
  * Change the color of the center which indicates the new color.
  *
  * @param color int of the color.
  */
 public void setNewCenterColor(int color) {
   mCenterNewColor = color;
   mCenterNewPaint.setColor(color);
   if (mCenterOldColor == 0) {
     mCenterOldColor = color;
     mCenterOldPaint.setColor(color);
   }
   if (onColorChangedListener != null) {
     onColorChangedListener.onColorChanged(color);
   }
   invalidate();
 }
  public void setColor(int color, boolean callback) {
    int alpha = Color.alpha(color);
    int red = Color.red(color);
    int blue = Color.blue(color);
    int green = Color.green(color);
    float[] hsv = new float[3];

    Color.RGBToHSV(red, green, blue, hsv);

    mAlpha = alpha;
    mHue = hsv[0];
    mSat = hsv[1];
    mVal = hsv[2];

    if (callback && mListener != null) {
      mListener.onColorChanged(Color.HSVToColor(mAlpha, new float[] {mHue, mSat, mVal}));
    }

    invalidate();
  }