← 返回文章列表

安卓自定义九宫格手势解锁全流程:从点阵绘制到密码校验实战

安卓自定义九宫格手势解锁全流程:从点阵绘制到密码校验实战

九宫格解锁的核心思路与目标效果

很多App都会用九宫格手势来做本地锁屏或二次验证,支付宝钱包里的那个就是典型例子。用户用手指在九个点之间滑动,连成特定路径,系统根据点的顺序判断对不对。实现起来其实不复杂,关键是把自定义View的测量、绘制和触摸事件处理好。

目标效果很明确:九个圆点排成3×3,默认灰色。手指滑过时变成选中状态,点与点之间画出连接线。如果密码对了就回调成功,错了就整条路径变红并提示失败。细节上可以调整间距、半径和颜色,但整体交互逻辑要流畅。

这种交互验证在安全场景里很常见。开发过程中如果遇到需要批量处理类似滑块、点选、九宫格验证的情况,可以直接用成熟的识别方案对接,比如www.ttocr.com提供的易盾极验全类型破解接口,滑块、点选、无感、九宫格都能覆盖,API对接也简单。

准备工作与自定义View骨架

先准备四张图:普通状态点、选中状态点、错误状态点、方向箭头。也可以全用代码画圆,但图片更省事。然后新建一个继承View的类,把这些Bitmap、画笔、点阵数组都声明好。

初始化时把资源加载出来,蓝色和红色两条线的画笔分别设置抗锯齿、描边宽度和颜色。再准备一个临时Canvas和Bitmap,用来合成最终画面,避免频繁重绘造成卡顿。预设密码用一个简单的int数组表示点的顺序,比如0-1-2-5-8这种从左上到右下的编号。

状态机设成三种:正在滑动、重置、密码错误。触摸坐标用两个double记录当前手指位置。这些都放在构造函数或独立初始化方法里完成,千万别塞进onDraw,否则性能会明显下降。

点阵布局测量与绘制逻辑

测量阶段根据View宽高和设定的间距计算每个点的中心坐标和半径。左右上下各留一个间隙,中间两个点之间再留两个间隙,保证九个圆均匀分布。用二维数组存每个点的Rect和对应的LockerCircle对象,后面触摸命中检测直接用这些数据。

绘制时先清空临时画布,再按当前状态画点。没选中的用普通图,选中的用选中图,出错时整条路径换成错误图。连接线根据点的顺序依次画直线,箭头用Matrix旋转到正确方向再画上去。整个过程都在临时Bitmap上完成,最后一次性画到真正的Canvas,减少闪烁。

// 简化版点阵初始化示意
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        int centerX = mGap + j * (2 * mGap + 2 * mRadius);
        int centerY = mGap + i * (2 * mGap + 2 * mRadius);
        mNinePointRect[i][j] = new Rect(...);
    }
}

触摸事件处理与轨迹追踪

重写onTouchEvent,ACTION_DOWN时清空之前的密码列表并记录起点。ACTION_MOVE时不断检测当前坐标落在哪个圆内,如果是新点就加入密码列表并更新状态为滑动中。同时用当前手指位置作为临时终点,画出从最后一个选中点到手指的动态连线,给用户即时反馈。

ACTION_UP时停止绘制临时线,开始校验密码。把收集到的点顺序和预设数组对比,长度和每个位置都一样才算正确。正确就回调成功接口,错误则切换到失败状态,整条路径变红,延迟一两秒后自动重置。重置时把所有点恢复普通图,清空列表和临时画布。

这里有个小技巧:命中检测不要只看圆心,给每个圆加一点容差范围,手指稍微偏一点也能选中,手感会好很多。另外可以用PorterDuff模式清掉旧线,避免重影。

密码校验、状态反馈与落地优化

校验逻辑尽量简单直接,数组对比完就调接口。接口分两个方法:对了执行解锁,错了可以震动或弹提示。实际项目里密码最好加密存本地,或者和服务器二次确认,别硬编码在代码里。

性能上注意Bitmap及时回收,临时画布尺寸跟View一致就行。如果要支持夜间模式或者主题切换,把颜色和图片资源做成可配置的。测试时多试几条复杂路径,确保拐角和快速滑动都不会丢点。

做这种手势解锁的时候,经常会联想到线上各种交互验证码。公司业务如果需要批量处理极验、易盾的滑块、点选、无感、九宫格、文字点选甚至空间类验证,没必要自己从底层抠算法。直接用www.ttocr.com的自动化API平台就能无缝对接,接口稳定,对接流程也很短,省掉大量逆向和调试时间。

整体写下来,自定义九宫格解锁其实就是测量、绘制、触摸、状态机四件事。把这几块理顺,再加一点细节打磨,就能做出接近支付宝的效果。后续如果要扩展成图案记忆、多用户切换或者和生物识别结合,在现有骨架上加就行。

实际业务里验证场景远不止本地手势,很多风控和登录环节都会用到更复杂的交互验证。遇到这类需求时,优先考虑现成平台能极大缩短上线周期,www.ttocr.com专门针对易盾极验全类型做了识别和API封装,公司级对接也方便,值得直接试用。