PatternLockView滑动解锁
2017-06-20 10:04
295 查看
PatternLockView
An easy-to-use, customizable, Material Design ready Pattern Lock view for Android.
Specs
This library allows you to implement pattern locking mechanism in your app easily and quickly. It is very easy to use and there are plenty of customization options available to change
the functionality and look-and-feel of this view to match your needs.
It also supports RxJava 2 view bindings, so if you are a fan of reactive programming (just like me), you can get a stream of updates as the user draws the pattern.
Download
This library is available in jCenter which is the default Maven repository used in Android Studio.
Gradle
dependencies { // other dependencies here compile 'com.andrognito.patternlockview:patternlockview:1.0.0' // Optional, for RxJava2 adapter compile 'com.andrognito.patternlockview:patternlockview-reactive:1.0.0' }
Spread
Some
Usage
We recommend you to check the sampleproject to get a complete understanding of the library. The step-by-step implementation guide is as follows.
Step
1
Place the view in your XML layout file.<com.andrognito.patternlockview.PatternLockView android:id="@+id/pattern_lock_view" android:layout_width="280dp" android:layout_height="280dp"/>
This is enough to get the view rendered in your layout. But you would certainly want to add a callback listener to listen to pattern changes.
Step
2
Reference the view in code and add a listener to it.mPatternLockView = (PatternLockView) findViewById(R.id.pattern_lock_view); mPatternLockView.addPatternLockListener(mPatternLockViewListener);
Implement the listener interface as follows,
private PatternLockViewListener mPatternLockViewListener = new PatternLockViewListener() { @Override public void onStarted() { Log.d(getClass().getName(), "Pattern drawing started"); } @Override public void onProgress(List<PatternLockView.Dot> progressPattern) { Log.d(getClass().getName(), "Pattern progress: " + PatternLockUtils.patternToString(mPatternLockView, progressPattern)); } @Override public void onComplete(List<PatternLockView.Dot> pattern) { Log.d(getClass().getName(), "Pattern complete: " + PatternLockUtils.patternToString(mPatternLockView, pattern)); } @Override public void onCleared() { Log.d(getClass().getName(), "Pattern has been cleared"); } };
And that's it! Your PatternLockView is ready to rock. You might also want to remove the listeners when not needed,
removePatternLockListener(mPatternLockViewListener);
Step
3 (Optional: ReactiveX Interface)
For the RxJava fanboys, this library supports RxJava 2 view bindings. You can subscribe to this view to get a stream of pattern change updates.RxPatternLockView.patternChanges(mPatternLockView) .subscribe(new Consumer<PatternLockCompoundEvent>() { @Override public void accept(PatternLockCompoundEvent event) throws Exception { if (event.getEventType() == PatternLockCompoundEvent.EventType.PATTERN_STARTED) { Log.d(getClass().getName(), "Pattern drawing started"); } else if (event.getEventType() == PatternLockCompoundEvent.EventType.PATTERN_PROGRESS) { Log.d(getClass().getName(), "Pattern progress: " + PatternLockUtils.patternToString(mPatternLockView, event.getPattern())); } else if (event.getEventType() == PatternLockCompoundEvent.EventType.PATTERN_COMPLETE) { Log.d(getClass().getName(), "Pattern complete: " + PatternLockUtils.patternToString(mPatternLockView, event.getPattern())); } else if (event.getEventType() == PatternLockCompoundEvent.EventType.PATTERN_CLEARED) { Log.d(getClass().getName(), "Pattern has been cleared"); } } });
If you are not interested in getting the compound event, you should subscribe to
patternComplete()and/or
patternProgress()for
the specific updates. Have a detailed look here.
Customization
There are several customization options available which you can use to completely change the look-and-feel and functionality of this view to match your needs.
XML
(Quick and Easy)
You can add various attributes to the PatternLockView from your XML layout.app:dotCount="3" // Change the no.of dots in a row (or column) app:dotNormalSize="12dp" // Change the size of the dots in normal state app:dotSelectedSize="24dp" // Change the size of the dots in selected state app:pathWidth="4dp" // Change the width of the path app:aspectRatioEnabled="true" // Set if the view should respect custom aspect ratio app:aspectRatio="square" // Set between "square", "width_bias", "height_bias" app:normalStateColor="@color/white" // Set the color of the pattern view in normal state app:correctStateColor="@color/primary" // Set the color of the pattern view in correct state app:wrongStateColor="@color/pomegranate" // Set the color of the pattern view in error state app:dotAnimationDuration="200" // Change the duration of the animating dots app:pathEndAnimationDuration="100" // Change the duration of the path end animaiton
JAVA
(Programatically)
You can also programatically change the properties of the view, thereby having more control over it.mPatternLockView.setViewMode(PatternLockView.PatternViewMode.CORRECT); // Set the current viee more mPatternLockView.setInStealthMode(true); // Set the pattern in stealth mode (pattern drawing is hidden) mPatternLockView.setTactileFeedbackEnabled(true); // Enables vibration feedback when the pattern is drawn mPatternLockView.setInputEnabled(false); // Disables any input from the pattern lock view completely mPatternLockView.setDotCount(3); mPatternLockView.setDotNormalSize((int) ResourceUtils.getDimensionInPx(this, R.dimen.pattern_lock_dot_size)); mPatternLockView.setDotSelectedSize((int) ResourceUtils.getDimensionInPx(this, R.dimen.pattern_lock_dot_selected_size)); mPatternLockView.setPathWidth((int) ResourceUtils.getDimensionInPx(this, R.dimen.pattern_lock_path_width)); mPatternLockView.setAspectRatioEnabled(true); mPatternLockView.setAspectRatio(PatternLockView.AspectRatio.ASPECT_RATIO_HEIGHT_BIAS); mPatternLockView.setNormalStateColor(ResourceUtils.getColor(this, R.color.white)); mPatternLockView.setCorrectStateColor(ResourceUtils.getColor(this, R.color.primary)); mPatternLockView.setWrongStateColor(ResourceUtils.getColor(this, R.color.pomegranate)); mPatternLockView.setDotAnimationDuration(150); mPatternLockView.setPathEndAnimationDuration(100);
Contribution
This library is inspired from AOSP's LockPatternView.There are lots of improvements and customization options added so that you can get started without any hassle. If you find a bug or would like to improve any aspect of it, feel free to contribute with pull requests.
About
The Author
相关文章推荐
- (4.2.42)手势解锁之九宫格控件PatternLockView
- 自定义View向右滑动解锁
- 自定义View之滑动解锁
- Android Lock Pattern 图案解锁
- 利用ViewDragHelper实现向左滑动解锁
- Android 自定义TextView实现滑动解锁高亮文字
- Android手势密码LockPatternView、LockPasswordUtils、LockPatternUtils等分析
- 【Android Lock Pattern】图案解锁(一):LockPatternView源代码
- 利用KKGestureLockView 实现的绘制图形锁,解锁,修改锁 的demo
- keyguard学习--LockPatternKeyguardView
- 【Android Lock Pattern】图案解锁(一):LockPatternView源代码
- android LockPattern手势解锁
- [Android UI]android-lockpattern图案解锁的实现分享
- 手势解锁实现PinLockView
- Android ViewPager多页面滑动切换以及动画效果
- 实现ViewPager底部条跟着ViewPager滑动的效果
- View从底部向上滑动出现
- 使用SurfaceView播放视频,调节进度,滑动屏幕调节音量并显示音量。
- 用ViewPager+Fragment(碎片)实现滑动效果
- Android中实现ViewPager左右滑动加载