private void update() { long curTime = SystemClock.uptimeMillis(); float progress = Math.min(1f, (float) (curTime - mStartTime) / mAnimDuration); float value = mInterpolator.getInterpolation(progress); mThumbPosition = mChecked ? (mStartPosition * (1 - value) + value) : (mStartPosition * (1 - value)); if (progress == 1f) stopAnimation(); if (mRunning) { if (getHandler() != null) getHandler().postAtTime(mUpdater, SystemClock.uptimeMillis() + ViewUtil.FRAME_DURATION); else stopAnimation(); } invalidate(); }