android三分钟快速集成手势密码功能
随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)
现如今,手势密码功能已是司空见惯,市面上也出现许多优秀的开源项目,让广大开发者更方便更快捷的集成此功能,这里在git上找了一个来试试,用起来还挺不错的,使用起来也比较简单,链接地址如下:
https://github.com/autume/GestureLock
先大概介绍下该项目支持哪些功能:
- 支持手势密码的绘制,并支持密码保存功能,解锁时自动比对密码给出结果
- 封装了绘制密码的方法,比对两次密码是否一致,可以快捷地进行手势密码的设置
- 可以设置密码输入错误后的重试次数上限
- 可以自定义不同状态下手势密码图案的颜色
- 可以自定义手势密码的触摸点数量(n*n)
上一个效果图瞧一瞧
现在大概知道我们要实现哪些功能了,下面分享下使用方法和步骤
首先我们要在自己的工程里面引用该项目库
如果是as工程,在工程的 build.gradle中加入:
allprojects {repositories {...maven { url "https://jitpack.io" }}}
module的build.gradle中加入依赖:
dependencies {compile 'com.github.autume:GestureLock:1.0.0'}
如果是eclipse工程,需要把原库项目转换为eclipse的library工程,然后自己的项目引用就行了。
当然也可以把原库项目代码和资源复制到自己的项目,只有几个类,代码量也不多。
引用好后,就可以开始写代码了,首先在自己的布局文件里面引用
<com.syd.oden.gesturelock.view.GestureLockViewGroupandroid:id="@+id/gesturelockview"android:layout_width="match_parent"android:layout_height="match_parent"app:preference_id="1"android:layout_marginTop="30dp"app:count="3" />
这里有几个自定义属性,在库项目的attr.xml配置中可以看到,说明如下
color_no_finger:未触摸时圆形的颜色
color_finger_on:触摸时圆形的颜色
color_finger_up_correct:输入正确时圆形的颜色
color_finger_up_error:出错时圆形的颜色
count:手势密码的圆形数量,n*n
preference_id:手势密码保存的id号,不输入或输入-1则使用默认的id
配置好布局文件我们已经可以看到手势图效果了,然后我们需要在代码里面加一些逻辑
首先要在oncreate初始化控件,这个是最基本的
private void initView() {gestureLockViewGroup = (GestureLockViewGroup) findViewById(R.id.gesturelockview);tv_state = (TextView) findViewById(R.id.tv_state);layout_reset = (RelativeLayout) findViewById(R.id.layout_reset);layout_reset.setOnClickListener(this);}
状态提示框自己定义位置,一般在手势图上面,清除密码按钮是为了方便测试,具体使用场景根据自己项目需求定
然后就是初始化手势了,有四个步骤
private void initGesture() {setGestureWhenNoSetPassword();setGesturePasswordSettingListener();setGestureEventListener();setGestureRetryLimitListener();}
1、设置主页面提示ui,当还没有设置过密码的时候,主页面需改为提示绘制手势密码
/*** xml布局文件默认解锁页面,当密码未设置时重置为设置密码的页面*/private void setGestureWhenNoSetPassword() {if (!gestureLockViewGroup.isSetPassword()) {tv_state.setTextColor(Color.WHITE);tv_state.setText("绘制手势密码");}}
2、注入设置密码监听器
private void setGesturePasswordSettingListener() {gestureLockViewGroup.setGesturePasswordSettingListener(new GesturePasswordSettingListener() {@Overridepublic boolean onFirstInputComplete(int len) {if (len > 3) {tv_state.setTextColor(Color.WHITE);tv_state.setText("再次绘制手势密码");return true;}tv_state.setTextColor(Color.RED);tv_state.setText("最少连接4个点,请重新输入!");return false;}@Overridepublic void onSuccess() {tv_state.setTextColor(Color.WHITE);Toast.makeText(MainActivity.this, "密码设置成功!", Toast.LENGTH_SHORT).show();tv_state.setText("请输入手势密码解锁!");}@Overridepublic void onFail() {tv_state.setTextColor(Color.RED);tv_state.setText("与上一次绘制不一致,请重新绘制");}});}
这是设置密码的监听器回调, 第一次设置完会进行回调,进行业务判断后,会进行第二次设置,两次匹配成功表示手势设置成功,否则会回调失败,几个方法一目了然。设置好密码后就可以使用手势检测了。
3、设置手势检测监听器
private void setGestureEventListener() {gestureLockViewGroup.setGestureEventListener(new GestureEventListener() {@Overridepublic void onGestureEvent(boolean matched) {if (!matched) {tv_state.setTextColor(Color.RED);tv_state.setText("手势密码错误");HandlerUtil.postDelayedRunnOnUI(new Runnable() {@Overridepublic void run() {gestureLockViewGroup.resetView();}}, 1000);} else {// 重置检测if (isReset) {isReset = false;Toast.makeText(MainActivity.this, "清除成功!", Toast.LENGTH_SHORT).show();resetGesturePattern();} else {// 匹配检测tv_state.setTextColor(Color.WHITE);tv_state.setText("手势密码正确");}}}});}
这个是检测手势是否匹配的监听器回调,如果不匹配自己页面的提示文字状态作相应修改,原框架检测不匹配后会一直保留红色,我观察大部分手势密码器都会红一下,然后恢复之前的颜色,所以我这里加了一个延迟1秒恢复,当然这个功能也可以直接集成到手势库项目中,使用起来更方便。
如果手势匹配成功,分为两种情况,一是清除密码的时候需要验证一下原密码,所以这个分支执行的逻辑是清除原密码,逻辑在resetGesturePattern方法里面,二是正常的检测,通过后一般在项目中就可以跳转页面了,这里只做个提示表示个意思。
重置密码方法:
/*** 重置密码和UI页面*/private void resetGesturePattern() {gestureLockViewGroup.removePassword();setGestureWhenNoSetPassword();gestureLockViewGroup.resetView();}
几个作用,移除文件里面缓存的密码,主页面提示恢复检测的状态,手势重置
4、设置错误次数控制监听器
为了安全性,一般会设置总共可以输错几次,这个大家都懂的
/*** 设置手势错误重试次数监听器*/private void setGestureRetryLimitListener() {gestureLockViewGroup.setGestureUnmatchedExceedListener(3, new GestureUnmatchedExceedListener() {@Overridepublic void onUnmatchedExceedBoundary() {tv_state.setTextColor(Color.RED);tv_state.setText("错误次数过多,请稍后再试!");}});}
通过这几步,已经可以把手势整个流程跑起来了,梳理一下关键环节,首先要设置手势密码,用户要进行两次绘制匹配,然后就是每次登陆app等时候进行手势检测,关键逻辑就在那两个监听器里面,其它的都是一些辅助作用。
该开源库还提供了一些其它API方便大家更灵活的使用
public void removePassword() :清除密码
public void savePassword() : 保存密码,设置手势密码成功后会自动保存,也可以调用该接口另外设置密码
public void getPassword(): 获取密码
public void setRetryTimes(int retryTimes) : 设置重试次数上限
public boolean isSetPassword() : 返回现在是否已经设置有密码
public void resetView() : 将视图Reset
对源码有兴趣的可以在前面git地址去下载项目源码,也不复杂。
这里附一个本测试demo的项目源码,方便大家运行调试。
手势密码检测器-Android代码类资源-CSDN下载
有什么问题欢迎留言,也可以关注公众号、加技术交流群等
android三分钟快速集成手势密码功能相关推荐
- 为安卓应用添加手势密码功能,遇到的一些问题以及解决方法
公司的APP有个需求为他添加类似于支付宝的手势密码验证功能效果图如下 首先我们要分析三个问题: 1.手势密码的作用是什么? 2.在什么时候启动? 3.启动之后干什么? 1.手势密码的作用是什么? 这里 ...
- 云小课 | 一个三分钟快速定制OCR应用的神器,要不?
摘要:ModelArts Pro提供了文字识别套件,基于丰富的文字识别算法和行业知识积累,帮助客户快速构建满足不同业务场景需求的文字识别服务.三分钟即可快速定制OCR服务,实现多种版式图像的文字信息结 ...
- Android 一分钟快速使用极光推送
之前一直都是在项目中,直接把jpush下载的资源直接放在主module,每次感觉需要配置的东西很多,有时候会担心缺少什么导致最后跑不通. 如果你是老手,每个人都各有各的风格习惯,相互学习的可以了解下 ...
- android的手势解锁功能,Android应用开发之Android 5秒学会使用手势解锁功能
本文将带你了解Android应用开发Android 5秒学会使用手势解锁功能,希望本文对大家学Android有所帮助. Android手势解锁 本文讲述的是一个手势解锁的库,可以定制显示隐藏宫格点.路 ...
- android解锁动画效果,Android 5秒学会使用手势解锁功能
Android手势解锁 本文讲述的是一个手势解锁的库,可以定制显示隐藏宫格点.路径.并且带有小九宫格显示图,和震动!让你学会使用这个简单,高效的库! 先来一波效果效果展示: 手势解锁效果 今天给大家介 ...
- 深入理解 Redis Template及4种序列化方式__spring boot整合redis实现RedisTemplate三分钟快速入门
概述 使用Spring 提供的 Spring Data Redis 操作redis 必然要使用Spring提供的模板类 RedisTemplate, 今天我们好好的看看这个模板类 . RedisTem ...
- Spring Boot 快速集成第三方登录功能
Spring Boot 快速集成第三方登录功能 前言 此 demo 主要演示 Spring Boot 项目如何使用 史上最全的第三方登录工具 - JustAuth 实现第三方登录,包括 QQ 登录.G ...
- 三分钟快速了解CSS Display的属性:Block,Inline,Inline-Block
文章目录 三分钟快速了解CSS Display的属性:Block,Inline,Inline-Block Block Inline Inline-block Block,Inline,Inline-B ...
- android 手势密码功能sdk,利用ActivityLifecycleCallBack监控app前后台状态切换,实现手势密码即九宫格解锁...
转载注明出处:http://blog..net/coderder/article/details/51063493 利用ActivityLifecycleCallbacks监控app前后台状态切换,实 ...
- android 支付宝手势密码锁,Android实现支付宝手势密码功能
今天就给大家分享android实现支付宝手势密码,很常见,像现在用微信支付,支付宝支付的时候都要自己设置的4位PIN码,然后输入PIN码后立即调用支付接口去支付,毫无疑问的安全问题,不会觉得手机被人拿 ...
最新文章
- 浙江高校计算机等级考试二级办公,浙江省高校计算机等级考试二级(高级办公)试题12.ppt...
- 将近一半的用户希望能够在两秒内或者更短的时间内打开网站
- CometOJ#6 双倍快乐(简单DP)
- vue中使用Ueditor编辑器 -- 1
- python元祖和文件用法举例
- vim中实现javascript代码自动完成功能
- 存储设备在linux名称,Linux下的存储设备的管理
- servlet工作原理之tomcat篇
- 代码 点胶gcode_3D打印机启停代码Gcode
- Ubuntu20.04下搜狗输入法安装配置(超精简)
- mysql 1786_【MySQL案例】ERROR 1786 (HY000)
- 面试一脸懵:使用promise改造旧异步函数
- android ios能否用cocos2d js开发,cocos2d-x支持c++、js、lua开发
- outlook添加账号接受服务器,如何在outlook添加账号
- 帆软报表(FineReport)版本9打开版本10的报表
- 针对小游戏的激励视频,如何通过数据分析提升广告收入
- 有未经处理的异常: Microsoft C++ 异常: cv::Exception
- Runtime Error(ACCESS_VIOLATION)常见解决方法
- 计算机英语实用教程课后答案,计算机英语实用教程课后题参考答案.doc
- Oceanus:美团点评HTTP流量定制化路由的实践
热门文章
- 国企公司java面试题_整理最全的Java笔试题库之问答题篇-国企笔试题库
- 使用FMEA来分析系统的可用性
- smart原则_真正的有效目标--SMART原则
- 国际首个!OpenV2X 开源社区成立,填补 5G 路侧开放基础架构(RSOI)空白
- 易语言WebUI教程 —— 入门简介
- JAVA编程用什么软件最好_Java编程软件有哪些,Java编程用什么软件好?
- McAfee:僵尸网新威胁远甚Conficker
- ssq冷热号:子图之间间隔调整
- 将计算机网口虚拟串口软件,虚拟串口及其在串口转以太网中的应用
- 秀米svg点击显示另一张图_SVG的雷,你踩过了没?