一. 运行效果以及源码
1.gif图效果
2.源码地址
二. 主要的思路
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)
,不然没有效果,大坑一个。