Esempio n. 1
0
  @Override
  protected void onRestoreInstanceState(Parcelable state) {
    Bundle savedState = (Bundle) state;

    Parcelable superState = savedState.getParcelable(STATE_PARENT);
    super.onRestoreInstanceState(superState);

    mAngle = savedState.getFloat(STATE_ANGLE);
    setOldCenterColor(savedState.getInt(STATE_OLD_COLOR));
    int currentColor = calculateColor(mAngle);
    mPointerColor.setColor(currentColor);
    setNewCenterColor(currentColor);
  }
Esempio n. 2
0
  @Override
  public boolean onTouchEvent(MotionEvent event) {
    getParent().requestDisallowInterceptTouchEvent(true);

    // Convert coordinates to our internal coordinate system
    float x = event.getX() - mTranslationOffset;
    float y = event.getY() - mTranslationOffset;

    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        // Check whether the user pressed on the pointer.
        float[] pointerPosition = calculatePointerPosition(mAngle);
        if (x >= (pointerPosition[0] - mColorPointerHaloRadius)
            && x <= (pointerPosition[0] + mColorPointerHaloRadius)
            && y >= (pointerPosition[1] - mColorPointerHaloRadius)
            && y <= (pointerPosition[1] + mColorPointerHaloRadius)) {
          mUserIsMovingPointer = true;
          invalidate();
        }
        // Check whether the user pressed on the center.
        else if (x >= -mColorCenterRadius
            && x <= mColorCenterRadius
            && y >= -mColorCenterRadius
            && y <= mColorCenterRadius) {
          mCenterHaloPaint.setAlpha(0x50);
          setColor(getOldCenterColor());
          mCenterNewPaint.setColor(getOldCenterColor());
          invalidate();
        }
        // If user did not press pointer or center, report event not handled
        else {
          getParent().requestDisallowInterceptTouchEvent(false);
          return false;
        }
        break;
      case MotionEvent.ACTION_MOVE:
        if (mUserIsMovingPointer) {
          mAngle = (float) java.lang.Math.atan2(y, x);
          mPointerColor.setColor(calculateColor(mAngle));

          setNewCenterColor(mCenterNewColor = calculateColor(mAngle));

          if (mOpacityBar != null) {
            mOpacityBar.setColor(mColor);
          }

          if (mValueBar != null) {
            mValueBar.setColor(mColor);
          }

          if (mSaturationBar != null) {
            mSaturationBar.setColor(mColor);
          }

          if (mSVbar != null) {
            mSVbar.setColor(mColor);
          }

          invalidate();
        }
        // If user did not press pointer or center, report event not handled
        else {
          getParent().requestDisallowInterceptTouchEvent(false);
          return false;
        }
        break;
      case MotionEvent.ACTION_UP:
        mUserIsMovingPointer = false;
        mCenterHaloPaint.setAlpha(0x00);
        invalidate();
        break;
    }
    return true;
  }