一. 运行效果以及源码

1.gif图效果

2.源码地址

XLPictureUnlock

二. 主要的思路

1.如何让点亮点?

设置选中点的图片资源是选中的图片资源。

2.怎么判断点亮那个点?

  • 通过触摸事件获取触摸点的坐标,然后判断触摸点具体在哪一个点所在区域。
  • 既然我们需要判断在哪一个点的区域,那么我们在添加点的时候,将它们添加到一个List集合,便于遍历。
  • 如何判断一个点是否在一个视图区域呢,利用 RectF 类,它包含一个方法 public boolean contains(float x, float y),用来判断一个点是否在当前区域。

3.怎么绘制线条?以及保存图案?

  • 我们设置一个startPoint和一个endPoint保存一个线条的起止坐标。当手指从一个点滑出但是没有滑到其他的点时,我们利用startPoint和一个endPoint来drawLine。如果两个点被点亮,那么我们需要保存这两个点之间的Path,并保存进去集合,方便绘制。
  • 我们给每一个点设置了 id,那么一系列点亮的点就可以用对应的 id 表示,就将密码图案转化为字符串图案。
  • 使用 SharedPreferences 专门用来存储小型数据的类来持久化存储密码。

4. 绘制Path的坑

绘制Path的Paint一定要setStyle(Paint.Style.STROKE),不然没有效果,大坑一个。