PatternLockView
介绍:
一个好用且漂亮的Material Design图案解锁库
运行效果:
使用说明:
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'
}
Step 1
XML
<com.andrognito.patternlockview.PatternLockView
android:id="@+id/pattern_lock_view"
android:layout_width="280dp"
android:layout_height="280dp"/>
这样就能正确显示了,但是你肯定需要添加callback来监听图案的变化。
Step 2
find view并为它添加listener
mPatternLockView = (PatternLockView) findViewById(R.id.pattern_lock_view);
mPatternLockView.addPatternLockListener(mPatternLockViewListener);
按如下方式实现listener的interface
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");
}
};
当不需要的时候你可能想移掉listeners:removePatternLockListener(mPatternLockViewListener);
Step 3 (可选: ReactiveX Interface)
对于RxJava的粉丝来说,这个库还支持RxJava 2 view bindings。
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");
}
}
});
自定义
有几个自定义选项可以帮助你根据自己的需求定制外观。
XML (简单快速)
你可以添加在XML布局中为PatternLockView添加多个属性
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)
也可以在代码中改变view的属性,这样可以控制更多东西
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);
已下载
0