序言 第一次写Android技术博客,不知道该如何下手。
背景 现在人们越来越重视自己的隐私,对于一些涉及用户隐私的应用,用户可能会希望在应用启动时必须先输入密码。传统的数字式密码记忆繁琐、容易破解,而图案解锁则可以解决这个问题。因此,在应用中添加图案解锁功能,可以提高应用的可靠性,获得用户的信任。
今天,我要介绍的是Android 的屏幕9宫格图形解锁,如果有什么不对的地方,望各位批评指正。直接上代码
1. 首先自定义图形密码控件,继承自View,创建并绘制9个点,并重写onTouchEvent方法。
public class GestureLock extends View {
private Point[][] points = new Point[3][3];
private boolean inited = false;
private boolean isDraw = false;
private ArrayList<Point> pointList = new ArrayList<Point>();
private ArrayList<Integer> passList = new ArrayList<Integer>();
private Bitmap bitmapPointError;
private Bitmap bitmapPointNormal;
private Bitmap bitmapPointPress;
private OnDrawFinishedListener listener;
float mouseX, mouseY;
private float bitmapR;
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
Paint pressPaint = new Paint();
Paint errorPaint = new Paint();
public GestureLock(Context context) {
super(context);
}
public GestureLock(Context context, AttributeSet attrs) {
super(context, attrs);
}
public GestureLock(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
mouseX = event.getX();
mouseY = event.getY();
int[] ij;
int i, j;
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
resetPoints();
ij = getSelectedPoint();
if (ij != null)
{
isDraw = true;
i = ij[0];
j = ij[1];
points[i][j].state = Point.STATE_PRESS;
pointList.add(points[i][j]);
passList.add(i * 3 + j