@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawCircle( mLockDimensions.circleX, mLockDimensions.circleY, mLockDimensions.circleRadius, isEnabled() ? isLocked() ? mLockedBackgroundPaint : mUnlockedBackgroundPaint : mDisabledBackgroundPaint); canvas.drawRoundRect( mLockDimensions.lockLeftX, mLockDimensions.lockTopY, mLockDimensions.lockRightX, mLockDimensions.lockBottomY, mLockDimensions.strokeWidth, mLockDimensions.strokeWidth, mLockPaint); canvas.drawCircle( mLockDimensions.keyHoleX, mLockDimensions.keyHoleY, mLockDimensions.keyHoleRadius, mLockPaint); canvas.drawLine( mLockDimensions.handleSideLeftX, mLockDimensions.handleLeftSideBottomY, mLockDimensions.handleSideLeftX, mLockDimensions.handleSideTopY, mLockPaint); canvas.drawLine( mLockDimensions.handleSideRightX, mLockDimensions.handleRightSideBottomY, mLockDimensions.handleSideRightX, mLockDimensions.handleSideTopY, mLockPaint); canvas.drawArc( mLockDimensions.handleArcLeftX, mLockDimensions.handleArcTopY, mLockDimensions.handleArcRightX, mLockDimensions.handleArcBottomY, 180f, 180f, false, mLockPaint); canvas.drawCircle( mLockDimensions.circleX, mLockDimensions.circleY, mLockDimensions.tintSize, mShadowPaint); if (isDown()) { if (mShadowInterpolator == null) { mShadowInterpolator = new Interpolator(); } mLockDimensions.tintSize = mShadowInterpolator.getInterpolation() * mLockDimensions.circleRadius; if (mLockDimensions.tintSize < mLockDimensions.circleRadius) { postInvalidateDelayed(FPS); } } else if (mAnimateLock) { if (mAnimationInterpolator == null) { mAnimationInterpolator = new Interpolator(); } if (isLocked()) { mLockDimensions.animateHandle = (1 - mAnimationInterpolator.getInterpolation()) * mLockDimensions.handleRightSideLength; mLockDimensions.update(); if (mLockDimensions.animateHandle > 0) { postInvalidateDelayed(FPS); } else { mAnimateLock = false; } } else { mLockDimensions.animateHandle = mAnimationInterpolator.getInterpolation() * mLockDimensions.handleRightSideLength; mLockDimensions.update(); if (mLockDimensions.animateHandle < mLockDimensions.handleRightSideLength * 2.0) { postInvalidateDelayed(FPS); } else { mAnimateLock = false; } } } }