/**
   * =============================================================================================
   * The Animate
   * =============================================================================================
   */
  private void animateCheckedState(boolean newCheckedState) {
    AnimatorProperty property = new AnimatorProperty();
    if (newCheckedState) {
      property.mSweepAngle = 360;
      property.mCircleColor = mCheckedPaintColor;
    } else {
      property.mSweepAngle = 0;
      property.mCircleColor = mUnCheckedPaintColor;
    }

    if (mAnimator == null) {
      mAnimator =
          ObjectAnimator.ofObject(this, ANIM_VALUE, new AnimatorEvaluator(mCurProperty), property);
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2)
        mAnimator.setAutoCancel(true);
      mAnimator.setDuration(ANIMATION_DURATION);
      mAnimator.setInterpolator(ANIMATION_INTERPOLATOR);
    } else {
      mAnimator.cancel();
      mAnimator.setObjectValues(property);
    }
    mAnimator.start();
  }