@Override
  public void onUIPositionChange(
      PtrFrameLayout frame, boolean isUnderTouch, byte status, PtrIndicator ptrIndicator) {

    float percent = Math.min(1f, ptrIndicator.getCurrentPercent());

    if (status == PtrFrameLayout.PTR_STATUS_PREPARE) {
      mDrawable.setAlpha((int) (255 * percent));
      mDrawable.showArrow(true);

      float strokeStart = ((percent) * .8f);
      mDrawable.setStartEndTrim(0f, Math.min(0.8f, strokeStart));
      mDrawable.setArrowScale(Math.min(1f, percent));

      // magic
      float rotation = (-0.25f + .4f * percent + percent * 2) * .5f;
      mDrawable.setProgressRotation(rotation);
      invalidate();
    }
  }