本文基于Hongyang大神的博客:http://blog.csdn.net/lmj623565791/article/details/36236113
转载请注明来源:http://blog.csdn.net/u013258802/article/details/53065664
上上篇界面修改的文章:http://blog.csdn.net/u013258802/article/details/52959513
上一篇隐藏轨迹的文章:http://blog.csdn.net/u013258802/article/details/53063691
本文目的如下:
1、加一个设置初始密码的功能
2、让手势单点生效
3、让绘制路径的中间点自动加入轨迹(例如选中第一排的1位和3位时2位也能自动选中)
4、一些其它方面的优化
一、加入设置初始密码的功能
设置初始密码时,需要用户先输入一个合法的密码(例如长度不小于4),然后提示输入确认密码,请求用户再次输入,直到再次输入正确。
也就是说,第一次只做长度判断,长度足够就 setAnswer(),第二次就进入正常判断流程 checkAnswer() ,因此我们需要一个 boolean 型来标识是否是初次设置密码。
逻辑比较简单,在 ACTION_UP 事件的回调里判断 firstSet 标志,为 false 时 checkAnswer(),为 true 时 setAnswer()。
首先我们需要一个 firstSet 标识和 set 方法:
// 默认false
private boolean isFirstSet = false;
// 是否是初次设置密码
public void isFirstSet(boolean isFirstSet) {
this.isFirstSet = isFirstSet;
}
// listener
public interface OnGestureLockViewListener {
// 单独选中的元素的id
void onBlockSelected(int cId);
// 是否匹配
void onGestureEvent(boolean matched);
// 超过尝试次数
void onUnmatchedExceedBoundary();
// 首次设置密码
void onFirstSetPattern(boolean patternOk);
}
我为了看起来方便就没有遵循编码规范,大家不要学我:P
另外这个onBlockSelected()个人感觉实际用处不大,删掉也行。
ACTION_UP事件里原来的回调部分是这样的:
case MotionEvent.ACTION_UP:
mPaint.setColor(mFingerUpColor);
mPaint.setAl