Кастомный компонент для ввода шаблонного пароля с экрана, библиотека позволяет легко и быстро внедрять механизм блокировки шаблонами в приложения. Она очень проста в использовании и предоставляет множество вариантов настройки внешнего вида и поведения этого компонента, чтобы удовлетворить ваши потребности. Поддерживает также привязку RxJava 2, поэтому если вы предпочитаете реактивное программирование (как и я), то сможете получать поток событий при рисовании пользователем шаблона.
"apiVersion": { "compatible": 5, "target": 5, "releaseType": "Beta1" // Здесь ничего добавлять не требуется }
Создайте har-пакет из библиотеки и поместите его в папку libs. Внесите следующие изменения в gradle вашего entry-модуля:
implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
Добавьте репозиторий Maven Central и зависимости в ваш проект:
allprojects{
repositories{
mavenCentral()
}
}
implementation 'io.openharmony.tpc.thirdlib:patternlockview-core:1.0.0'
implementation 'io.openharmony.tpc.thirdlib:patternlockview-reactive:1.0.0'
implementation 'io.reactivex.rxjava2:rxjava:2.0.2'
```# Требования к запуску entry
Запустите проект через DevEco Studio и установите SDK. Измените версию `classpath` в `build.gradle` вашего модуля `entry` на ту, которая используется в новом проекте IDE.
# Пример использования
```xml
<?xml version="1.0" encoding="utf-8"?>
<DependentLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
xmlns:app="http://schemas.huawei.com/res/app"
ohos:width="match_parent"
ohos:height="match_parent"
ohos:background_element="#000000">
<DirectionalLayout
ohos:orientation="vertical"
ohos:height="match_content"
ohos:width="match_parent">
<Image
ohos:id="$+id:profile_image"
ohos:width="84vp"
ohos:height="84vp"
ohos:layout_alignment="center"
ohos:top_margin="104vp"
ohos:image_src="$media:img_no_avatar"/>
<Text
ohos:id="$+id:profile_name"
ohos:width="match_content"
ohos:height="match_content"
ohos:layout_alignment="center"
ohos:top_margin="36vp"
ohos:text_alignment="center"
ohos:max_text_lines="1"
ohos:text="Добро пожаловать"
ohos:text_color="#fff"
ohos:text_size="34fp"/>
</DirectionalLayout>
<com.andrognito.patternlockview.PatternLockView
ohos:align_parent_bottom="true"
ohos:center_in_parent="true"
ohos:id="$+id:patter_lock_view"
ohos:width="280vp"
ohos:height="280vp"
ohos:bottom_margin="50vp"
ohos:layout_alignment="center"
ohos:top_margin="16vp"
app:dotNormalSize="14vp"
app:aspectRatio="width_bias"
app:aspectRatioEnabled="true"
app:dotAnimationDuration="150"
app:correctStateColor="#008000"
app:normalStateColor="#ffffff"
app:dotCount="3"/>
</DependentLayout>
``````java
/**
* Example of screen unlock pattern drawing
*/
public class MainAbilitySlice extends AbilitySlice {
private PatternLockView mPatternLockView;
private PatternLockViewListener mPatternLockViewListener = new PatternLockViewListener() {
@Override
public void onStarted() {
LogUtil.error(getClass().getName(), "Start of pattern drawing");
}
@Override
public void onProgress(List<PatternLockView.Dot> progressPattern) {
LogUtil.error(getClass().getName(), "Pattern progress: " +
PatternLockUtils.patternToString(mPatternLockView, progressPattern));
}
@Override
public void onComplete(List<PatternLockView.Dot> pattern) {
LogUtil.error(getClass().getName(), "Pattern completed: " +
PatternLockUtils.patternToString(mPatternLockView, pattern));
}
@Override
public void onCleared() {
LogUtil.error(getClass().getName(), "Pattern cleared");
}
};
``````java
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
mPatternLockView = (PatternLockView) findComponentById(ResourceTable.Id_patter_lock_view);
mPatternLockView.setDotCount(3);
mPatternLockView.setAspectRatioEnabled(true);
mPatternLockView.setAspectRatio(PatternLockView.AspectRatio.ASPECT_RATIO_HEIGHT_BIAS);
mPatternLockView.setViewMode(PatternLockView.PatternViewMode.CORRECT);
mPatternLockView.setDotAnimationDuration(150);
mPatternLockView.setPathEndAnimationDuration(bk);
mPatternLockView.setInStealthMode(false);
mPatternLockView.setTactileFeedbackEnabled(true);
mPatternLockView.setInputEnabled(true);
mPatternLockView.addPatternLockListener(mPatternLockViewListener);
}
}```markdown
RxPatternLockView.patternComplete(mPatternLockView)
.subscribe(new io.reactivex.functions.Consumer<PatternLockCompleteEvent>() {
@Override
public void accept(PatternLockCompleteEvent patternLockCompleteEvent) throws Exception {
LogUtil.error(getClass().getName(), "Завершение вызова: " + patternLockCompleteEvent.getPattern().toString());
}
});
RxPatternLockView.patternChanges(mPatternLockView)
.subscribe(new Consumer<PatternLockCompoundEvent>() {
@Override
public void accept(PatternLockCompoundEvent event) throws Exception {
if (event.getEventType() == PatternLockCompoundEvent.EventType.PATTERN_STARTED) {
LogUtil.error(getClass().getName(), "Начало отрисовки шаблона");
} else if (event.getEventType() == PatternLockCompoundEvent.EventType.PATTERN_PROGRESS) {
LogUtil.error(getClass().getName(), "Прогресс шаблона: " +
PatternLockUtils.patternToString(mPatternLockView, event.getPattern()));
} else if (event.getEventType() == PatternLockCompoundEvent.EventType.PATTERN_COMPLETE) {
LogUtil.error(getClass().getName(), "Шаблон завершен: " +
PatternLockUtils.patternToString(mPatternLockView, event.getPattern());
} else if (event.getEventType() == PatternLockCompoundEvent.EventType.PATTERN_CLEARED) {
LogUtil.error(getClass().getName(), "Шаблон очищен");
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
}
Авторское право 2017 aritraroy
Лицензировано в соответствии с лицензией Apache, версия 2.0 ("Лицензия"); вы можете использовать этот файл только в соответствии с Лицензией. Вы можете получить копию Лицензии по адресу:
http://www.apache.org/licenses/LICENSE-2.0
Если это требует действующего закона или было согласовано письменно, программное обеспечение, распространяемое в соответствии с Лицензией, распространяется на условиях "КАК ЕСТЬ", БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ ВОПРОЧЬ ЭТОГО. Смотрите Лицензию для конкретного языка, регулирующего права и ограничения, связанные с Лицензией.
Перевод:
Авторское право 2017 aritraroy
Лицензировано в соответствии с лицензией Apache, версия 2.0 ("Лицензия"); вы можете использовать этот файл только в соответствии с Лицензией. Вы можете получить копию Лицензии по адресу:
http://www.apache.org/licenses/LICENSE-2.0
Если это требует действующего законодательства или было согласовано письменно, программное обеспечение, распространяемое в соответствии с Лицензией, распространяется на условиях "КАК ЕСТЬ", БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ ВОПРОЧЬ ЭТОГО. См. Лицензию для конкретного языка, регулирующего права и ограничения, связанные с Лицензией.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )