随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(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三分钟快速集成手势密码功能相关推荐

  1. 为安卓应用添加手势密码功能,遇到的一些问题以及解决方法

    公司的APP有个需求为他添加类似于支付宝的手势密码验证功能效果图如下 首先我们要分析三个问题: 1.手势密码的作用是什么? 2.在什么时候启动? 3.启动之后干什么? 1.手势密码的作用是什么? 这里 ...

  2. 云小课 | 一个三分钟快速定制OCR应用的神器,要不?

    摘要:ModelArts Pro提供了文字识别套件,基于丰富的文字识别算法和行业知识积累,帮助客户快速构建满足不同业务场景需求的文字识别服务.三分钟即可快速定制OCR服务,实现多种版式图像的文字信息结 ...

  3. Android 一分钟快速使用极光推送

    之前一直都是在项目中,直接把jpush下载的资源直接放在主module,每次感觉需要配置的东西很多,有时候会担心缺少什么导致最后跑不通. 如果你是老手,每个人都各有各的风格习惯,相互学习的可以了解下 ...

  4. android的手势解锁功能,Android应用开发之Android 5秒学会使用手势解锁功能

    本文将带你了解Android应用开发Android 5秒学会使用手势解锁功能,希望本文对大家学Android有所帮助. Android手势解锁 本文讲述的是一个手势解锁的库,可以定制显示隐藏宫格点.路 ...

  5. android解锁动画效果,Android 5秒学会使用手势解锁功能

    Android手势解锁 本文讲述的是一个手势解锁的库,可以定制显示隐藏宫格点.路径.并且带有小九宫格显示图,和震动!让你学会使用这个简单,高效的库! 先来一波效果效果展示: 手势解锁效果 今天给大家介 ...

  6. 深入理解 Redis Template及4种序列化方式__spring boot整合redis实现RedisTemplate三分钟快速入门

    概述 使用Spring 提供的 Spring Data Redis 操作redis 必然要使用Spring提供的模板类 RedisTemplate, 今天我们好好的看看这个模板类 . RedisTem ...

  7. Spring Boot 快速集成第三方登录功能

    Spring Boot 快速集成第三方登录功能 前言 此 demo 主要演示 Spring Boot 项目如何使用 史上最全的第三方登录工具 - JustAuth 实现第三方登录,包括 QQ 登录.G ...

  8. 三分钟快速了解CSS Display的属性:Block,Inline,Inline-Block

    文章目录 三分钟快速了解CSS Display的属性:Block,Inline,Inline-Block Block Inline Inline-block Block,Inline,Inline-B ...

  9. android 手势密码功能sdk,利用ActivityLifecycleCallBack监控app前后台状态切换,实现手势密码即九宫格解锁...

    转载注明出处:http://blog..net/coderder/article/details/51063493 利用ActivityLifecycleCallbacks监控app前后台状态切换,实 ...

  10. android 支付宝手势密码锁,Android实现支付宝手势密码功能

    今天就给大家分享android实现支付宝手势密码,很常见,像现在用微信支付,支付宝支付的时候都要自己设置的4位PIN码,然后输入PIN码后立即调用支付接口去支付,毫无疑问的安全问题,不会觉得手机被人拿 ...

最新文章

  1. 浙江高校计算机等级考试二级办公,浙江省高校计算机等级考试二级(高级办公)试题12.ppt...
  2. 将近一半的用户希望能够在两秒内或者更短的时间内打开网站
  3. CometOJ#6 双倍快乐(简单DP)
  4. vue中使用Ueditor编辑器 -- 1
  5. python元祖和文件用法举例
  6. vim中实现javascript代码自动完成功能
  7. 存储设备在linux名称,Linux下的存储设备的管理
  8. servlet工作原理之tomcat篇
  9. 代码 点胶gcode_3D打印机启停代码Gcode
  10. Ubuntu20.04下搜狗输入法安装配置(超精简)
  11. mysql 1786_【MySQL案例】ERROR 1786 (HY000)
  12. 面试一脸懵:使用promise改造旧异步函数
  13. android ios能否用cocos2d js开发,cocos2d-x支持c++、js、lua开发
  14. outlook添加账号接受服务器,如何在outlook添加账号
  15. 帆软报表(FineReport)版本9打开版本10的报表
  16. 针对小游戏的激励视频,如何通过数据分析提升广告收入
  17. 有未经处理的异常: Microsoft C++ 异常: cv::Exception
  18. Runtime Error(ACCESS_VIOLATION)常见解决方法
  19. 计算机英语实用教程课后答案,计算机英语实用教程课后题参考答案.doc
  20. Oceanus:美团点评HTTP流量定制化路由的实践

热门文章

  1. 国企公司java面试题_整理最全的Java笔试题库之问答题篇-国企笔试题库
  2. 使用FMEA来分析系统的可用性
  3. smart原则_真正的有效目标--SMART原则
  4. 国际首个!OpenV2X 开源社区成立,填补 5G 路侧开放基础架构(RSOI)空白
  5. 易语言WebUI教程 —— 入门简介
  6. JAVA编程用什么软件最好_Java编程软件有哪些,Java编程用什么软件好?
  7. McAfee:僵尸网新威胁远甚Conficker
  8. ssq冷热号:子图之间间隔调整
  9. 将计算机网口虚拟串口软件,虚拟串口及其在串口转以太网中的应用
  10. 秀米svg点击显示另一张图_SVG的雷,你踩过了没?