一. 运行效果以及源码
1.gif图效果
2.源码地址
二.主要的思路
1.如何让点或者线条点亮?
- 首先在界面上面添加多个ImageView,用来显示多个点亮的点或者线条。
- 添加之后,当确认添加的位置没有错,利用 View 的 Visibility属性,设置不显示。
- 当需要显示的时候,在找到对应的视图设置为显示。
2.怎么判断点亮那个点?
- 通过触摸事件获取触摸点的坐标,然后判断触摸点具体在哪一个点所在区域。
- 既然我们需要判断在哪一个点的区域,那么我们在添加点的时候,将它们添加到一个List集合,便于遍历。
- 如何判断一个点是否在一个视图区域呢,利用 RectF 类,它包含一个方法
public boolean contains(float x, float y)
,用来判断一个点是否在当前区域。
3.怎么判断两个点之间的线条是否可以被点亮?以及保存图案?
- 我们给每一个点设置 id ,这样每两个点之间机会有一个固定的数字组合,我们将合理的数字组合保存在一个 List集合 中,便于查找两个点是否可以被点亮。
- 既然我们给每一个点设置了 id,那么一系列点亮的点就可以用对应的 id 表示,就将密码图案转化为字符串图案。
- 使用 SharedPreferences 专门用来存储小型数据的类来持久化存储密码。
4.怎么设置图密码误后,图案变成红色之后,过一会在消失?
- 对 ImageView 进行一个简单的自定义,添加两个属性,用来保存正常显示的图片资源id以及错误显示的图片资源id,添加一个方法用来更改显示的图片。
- 延时操作在下面的技术点里面有介绍。