docs: public Object getValue(float fraction) {
  
          // Special-case optimization for the common case of only two keyframes
          if (mNumKeyframes == 2) {
              if (mInterpolator != null) {
                  fraction = mInterpolator.getInterpolation(fraction);
              }
              return mEvaluator.evaluate(fraction, mFirstKeyframe.getValue(),
                      mLastKeyframe.getValue());
          }
          if (fraction <= 0f) {
              final Keyframe nextKeyframe = mKeyframes.get(1);
              final /*Time*/Interpolator interpolator = nextKeyframe.getInterpolator();
              if (interpolator != null) {
                  fraction = interpolator.getInterpolation(fraction);
              }
              final float prevFraction = mFirstKeyframe.getFraction();
              float intervalFraction = (fraction - prevFraction) /
                  (nextKeyframe.getFraction() - prevFraction);
              return mEvaluator.evaluate(intervalFraction, mFirstKeyframe.getValue(),
                      nextKeyframe.getValue());
          } else if (fraction >= 1f) {
              final Keyframe prevKeyframe = mKeyframes.get(mNumKeyframes - 2);
              final /*Time*/Interpolator interpolator = mLastKeyframe.getInterpolator();
              if (interpolator != null) {
                  fraction = interpolator.getInterpolation(fraction);
              }
              final float prevFraction = prevKeyframe.getFraction();
              float intervalFraction = (fraction - prevFraction) /
                  (mLastKeyframe.getFraction() - prevFraction);
              return mEvaluator.evaluate(intervalFraction, prevKeyframe.getValue(),
                      mLastKeyframe.getValue());
          }
          Keyframe prevKeyframe = mFirstKeyframe;
          for (int i = 1; i < mNumKeyframes; ++i) {
              Keyframe nextKeyframe = mKeyframes.get(i);
              if (fraction < nextKeyframe.getFraction()) {
                  final /*Time*/Interpolator interpolator = nextKeyframe.getInterpolator();
                  if (interpolator != null) {
                      fraction = interpolator.getInterpolation(fraction);
                  }
                  final float prevFraction = prevKeyframe.getFraction();
                  float intervalFraction = (fraction - prevFraction) /
                      (nextKeyframe.getFraction() - prevFraction);
                  return mEvaluator.evaluate(intervalFraction, prevKeyframe.getValue(),
                          nextKeyframe.getValue());
              }
              prevKeyframe = nextKeyframe;
          }
          // shouldn't reach here
          return mLastKeyframe.getValue();
      }