Skip to content
sinawangnan7 edited this page Sep 25, 2017 · 20 revisions

GestureLockView方法说明

相关属性修改的方法略过,具体请参看 Github Wiki Attr

方法总览

方法名 作用
getRadius() 获取半径值

补充:GestureLockView执行完onSizeChanged(w, h, oldw, oldh)方法后mRadius才有值。


方法名 作用
showErrorStatus() 显示错误状态

补充:设置后会一直显示错误状态。


方法名 作用
showErrorStatus(long millisecond) 显示错误状态多少毫秒

补充:显示错误状态millisecond毫秒后还原至初始状态


方法名 作用
clearView() 清理视图至初始状态

方法名 作用
setGestureLockListener(OnGestureLockListener listener) 设置手势监听器

方法名 作用
setPainter(Painter painter) 设置绘制者

补充:自定义绘制时使用该方法


方法细节说明

1.手势监听器设置方法: setGestureLockListener(OnGestureLockListener listener)

// 从XML视图中获取GestureLockView 
mGestureLockView = (GestureLockView) findViewById(R.id.glv);

// 设置手势解锁监听器
mGestureLockView.setGestureLockListener(new OnGestureLockListener() {

    /**
     * 监听视图解锁开始(手指按下)
     */
    @Override
    public void onStarted() {

    }

    /**
     * 图案解锁内容改变
     *
     * @param progress 解锁进度(数字字符串)
     */
    @Override
    public void onProgress(String progress) {
        
    }

    /**
     * 图案解锁完成
     *
     * @param result 解锁结果(数字字符串)
     */
    @Override
    public void onComplete(String result) {

    }
});

2.自定义绘制方法: setPainter(Painter painter)

// 从XML视图中获取GestureLockView
mGestureLockView = (GestureLockView) findViewById(R.id.glv);
        
// 设置自定义绘制者
mGestureLockView.setPainter(new Painter() {

    /**
     * 绘制正常状态的点
     *
     * @param point       点对象 中心坐标(point.x,point.y)半径 point.radius
     * @param canvas      画布
     * @param normalPaint 正常状态的画笔
     */
    @Override
    public void drawNormalPoint(Point point, Canvas canvas, Paint normalPaint) {

    }

    /**
     * 绘制按下状态的点 (参数解释类比上方)
     */
    @Override
    public void drawPressPoint(Point point, Canvas canvas, Paint pressPaint) {

    }

    /**
     * 绘制错误状态的点 (参数解释类比上方)
     */
    @Override
    public void drawErrorPoint(Point point, Canvas canvas, Paint errorPaint) {

    }
});

自定义Painter代码参考:

补充:绘制连线的方法默认已实现,无需开发者再次实现,但是如果绘制连线的效果开发者不满意或者需要拓展(像支付宝的箭头效果),开发者可自定义绘线方法(重写drawLines方法),代码如下:

// 设置自定义绘制者
mGestureLockView.setPainter(new Painter() {

    // 绘制点的方法(略) ......
    
    /**
     * 绘制连线
     *
     * @param points   点集合(已被按下的点)
     * @param eventX   事件X坐标(当前触摸位置)
     * @param eventY   事件Y坐标(当前触摸位置)
     * @param lineSize 线的粗细值
     * @param canvas   画布
     */
    @Override
    public void drawLines(List<Point> points, float eventX, float eventY, int lineSize, Canvas canvas) {
        super.drawLines(points, eventX, eventY, lineSize, canvas);
    }
});

绘制连线的方法没有提供画笔(Paint),需要开发者区分点状态从父类Painter获取不同的画笔,代码如下:

// 设置自定义绘制者
mGestureLockView.setPainter(new Painter() {

    // 绘制点的方法(略) ......

    /**
     * 绘制连线
     *
     * @param points   点集合(已被按下的点)
     * @param eventX   事件X坐标(当前触摸位置)
     * @param eventY   事件Y坐标(当前触摸位置)
     * @param lineSize 线的粗细值
     * @param canvas   画布
     */
    @Override
    public void drawLines(List<Point> points, float eventX, float eventY, int lineSize, Canvas canvas) {
        super.drawLines(points, eventX, eventY, lineSize, canvas);

        // 区分状态获取不同的画笔
        Paint paint = null;
        if(points.get(0).status == Point.POINT_PRESS_STATUS){ // 按下状态
            paint = mPressPaint;
        } else if (points.get(0).status == Point.POINT_ERROR_STATUS){ // 出错状态
            paint = mErrorPaint;
        }
        // TODO 开始自己的绘制逻辑
    }
});

自定义Painter(包含自定义连线)代码参考:

Clone this wiki locally