android图案解锁功能的实现

我们经常会在app中看到图案解锁的功能,所以寻思做一个,在某客视频上看到了教程,自己跟着做了一遍,记录一下,顺便理清一下思路。

思路讲解:

首先自定义一个图案的view,其中实现onDraw方法,以及添加接口回调进行验证密码正确性。
自定义view效果如下:
这里写图片描述

首先新建一个记录点的坐标的一个bean

public class Point {
    //表示图案状态
    public static  int STATE_NORMAL=0;
    public static  int STATE_PRESS=1;
    public static  int STATE_ERROR=2;
    //坐标
    float x,y;
    int state=STATE_NORMAL;

    public Point(float x, float y) {
        this.x = x;
        this.y = y;
    }
    //判断按下屏幕的点是否在某一个圆圈的区域内
    public  float distance(Point a)
    {
        float distance= (float) Math.sqrt((x-a.x)*(x-a.x)+(y-a.y)*(y-a.y));
        return  distance;
    }

}

下面是自定义view代码:

public class GestureLockView extends View {
   
    //三张不同状态圆的图片
    private Bitmap error,normal,press;
    //
    private ArrayList<Point> pointlist=new ArrayList<>();

    //设置圆的坐标位置的数组
    private  Point[][] points=new Point[3][3];

    //画圆的画笔(后面的参数为抗锯齿的作用)
    private Paint  paint=new Paint(Paint.ANTI_ALIAS_FLAG);
    //设置回调监听事件
    private OnDrawFinsihListner listner;

    //保存圆的半径
    private float radius;
    public GestureLockView(Context context) {
        super(context);
    }

    public GestureLockView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public GestureLockView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    //判断是否初始化
    private boolean inited=false;
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //ondraw方法会多次调用所以要设置标记位判断是否调用过
        if (!inited){
            init();
        }
        //画图
        drawPoints(canvas);
        //画线
        if (pointlist.size()>0)
        {   //冲重第一个点画起
            Point a=pointlist.get(0);
            for (int i=1;i<pointlist.size();i++)
            {
                Point b=pointlist.get(i);
                drawLine(canvas,a,b);
                a=b;
            }
            if (isDraw)
            {
                drawLine(canvas,a,new Point(mouseX,mouseY));
            }
        }
    }

    //绘制圆圈背景图案
    private  void drawPoints(Canvas canvas){
        for (
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值