protected internal override void ComputeRender(float renderProgress) { if (mCurrentBounds.IsEmpty) { return; } if (mMotherMovePath.IsEmpty) { mMotherMovePath.Set(CreateMotherMovePath()); mMotherMovePathMeasure.SetPath(mMotherMovePath, false); mChildMovePath.Set(CreateChildMovePath()); mChildMovePathMeasure.SetPath(mChildMovePath, false); } //mother oval float motherMoveProgress = MOTHER_MOVE_INTERPOLATOR.GetInterpolation(renderProgress); mMotherMovePathMeasure.GetPosTan(GetCurrentMotherMoveLength(motherMoveProgress), mMotherPosition, null); mMotherOvalHalfWidth = mMaxMotherOvalSize; mMotherOvalHalfHeight = mMaxMotherOvalSize * GetMotherShapeFactor(motherMoveProgress); //child Oval float childMoveProgress = CHILD_MOVE_INTERPOLATOR.GetInterpolation(renderProgress); mChildMovePathMeasure.GetPosTan(GetCurrentChildMoveLength(childMoveProgress), mChildPosition, null); SetupChildParams(childMoveProgress); mRotateDegrees = (int)(DensityUtil.Radian2Degrees(Math.Atan((mMotherPosition[1] - mChildPosition[1]) / (mMotherPosition[0] - mChildPosition[0])))); mRevealCircleRadius = GetCurrentRevealCircleRadius(renderProgress); mCurrentOvalColor = GetCurrentOvalColor(renderProgress); mCurrentBackgroundColor = GetCurrentBackgroundColor(renderProgress); }