diff --git a/app/src/main/java/com/andrognito/patternlockdemo/MainActivity.java b/app/src/main/java/com/andrognito/patternlockdemo/MainActivity.java index a1657e1..eacae6c 100644 --- a/app/src/main/java/com/andrognito/patternlockdemo/MainActivity.java +++ b/app/src/main/java/com/andrognito/patternlockdemo/MainActivity.java @@ -70,6 +70,9 @@ protected void onCreate(Bundle savedInstanceState) { mPatternLockView.setInputEnabled(true); mPatternLockView.addPatternLockListener(mPatternLockViewListener); + mPatternLockView.setCircleRadius((int) getResources().getDimension(R.dimen.pattern_lock_dot_circle_size)); + mPatternLockView.setShowCircleEnable(true); + RxPatternLockView.patternComplete(mPatternLockView) .subscribe(new Consumer() { @Override diff --git a/patternlockview/src/main/java/com/andrognito/patternlockview/PatternLockView.java b/patternlockview/src/main/java/com/andrognito/patternlockview/PatternLockView.java index 1624fd0..fe32327 100755 --- a/patternlockview/src/main/java/com/andrognito/patternlockview/PatternLockView.java +++ b/patternlockview/src/main/java/com/andrognito/patternlockview/PatternLockView.java @@ -124,7 +124,26 @@ public class PatternLockView extends View { private int mDotSelectedSize; private int mDotAnimationDuration; private int mPathEndAnimationDuration; + private int mCircleRadius = 0; // Radius of the circle + private boolean mShowCircleEnable = false; // enable draw a circle + public int getCircleRadius() { + return mCircleRadius; + } + + public void setCircleRadius(int circleRadius) { + mCircleRadius = circleRadius; + initView(); + invalidate(); + } + + public boolean isShowCircleEnable() { + return mShowCircleEnable; + } + + public void setShowCircleEnable(boolean showCircleEnable) { + mShowCircleEnable = showCircleEnable; + } private Paint mDotPaint; private Paint mPathPaint; @@ -191,6 +210,10 @@ public PatternLockView(Context context, AttributeSet attrs) { DEFAULT_DOT_ANIMATION_DURATION); mPathEndAnimationDuration = typedArray.getInt(R.styleable.PatternLockView_pathEndAnimationDuration, DEFAULT_PATH_END_ANIMATION_DURATION); + mCircleRadius = (int) typedArray.getDimension(R.styleable.PatternLockView_circleRadius, + ResourceUtils.getDimensionInPx(getContext(), R.dimen.pattern_lock_dot_circle_size)); + mShowCircleEnable = typedArray.getBoolean(R.styleable.PatternLockView_showCircleEnable, + false); } finally { typedArray.recycle(); } @@ -360,6 +383,9 @@ protected void onDraw(Canvas canvas) { } canvas.drawPath(currentPath, mPathPaint); } + // Draw a circle outside the dot + if (isShowCircleEnable()) + canvas.drawCircle(centerX, centerY, mCircleRadius, mPathPaint); lastX = centerX; lastY = centerY; } @@ -374,6 +400,9 @@ protected void onDraw(Canvas canvas) { mPathPaint.setAlpha((int) (calculateLastSegmentAlpha( mInProgressX, mInProgressY, lastX, lastY) * 255f)); canvas.drawPath(currentPath, mPathPaint); + // Draw a circle outside the dot + if (isShowCircleEnable()) + canvas.drawCircle(lastX, lastY, mCircleRadius, mPathPaint); } } } diff --git a/patternlockview/src/main/res/values/attrs.xml b/patternlockview/src/main/res/values/attrs.xml index c4d8d7d..753e368 100644 --- a/patternlockview/src/main/res/values/attrs.xml +++ b/patternlockview/src/main/res/values/attrs.xml @@ -16,5 +16,7 @@ + + \ No newline at end of file diff --git a/patternlockview/src/main/res/values/dimens.xml b/patternlockview/src/main/res/values/dimens.xml index e857757..cbaf85e 100644 --- a/patternlockview/src/main/res/values/dimens.xml +++ b/patternlockview/src/main/res/values/dimens.xml @@ -3,4 +3,5 @@ 3dp 10dp 24dp + 20dp \ No newline at end of file