From 0a5377d70c034e923bec8726e707decdcd17c67c Mon Sep 17 00:00:00 2001 From: lsyz0021 Date: Thu, 15 Jun 2017 11:18:28 +0800 Subject: [PATCH] add a circle style --- .../patternlockdemo/MainActivity.java | 3 ++ .../patternlockview/PatternLockView.java | 31 +++++++++++++++++++ patternlockview/src/main/res/values/attrs.xml | 2 ++ .../src/main/res/values/dimens.xml | 1 + 4 files changed, 37 insertions(+) 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 b82c9b0..b1d5ed3 100755 --- a/patternlockview/src/main/java/com/andrognito/patternlockview/PatternLockView.java +++ b/patternlockview/src/main/java/com/andrognito/patternlockview/PatternLockView.java @@ -126,6 +126,27 @@ public class PatternLockView extends View { 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; @@ -192,6 +213,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(); } @@ -361,6 +386,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; } @@ -375,6 +403,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