sinawangnan7/GestureLockView

在完成回调中结束页面会在走一次完成

Opened this issue · 6 comments

目前解决办法是在结束页面前注销回调监听

 mGlv.setGestureLockListener(null);

我想先确定下你的问题:

public interface OnGestureLockListener {

    /**
     * 监听视图解锁开始(手指按下)
     */
    void onStarted();

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

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

你的问题是指:
1.最后一次onProgress方法的参数progress和onComplete方法的参数result一样?
2.还是onComplete方法被调用了两次?

我在onComplete 中执行销毁fragment onComplete又被调用了一次 不知道是不是和我使用的fragment框架有关。 当时比较急也没做其他测试 直接置空规避了。
https://github.com/YoKeyword/Fragmentation 使用的这个fragment框架

onComplete这个方法只有在手指抬起(ACTION_UP事件)时会被回调,用于标识触摸完成。
可以检查下:是不是你注册了两次OnGestureLockListener或者手动调用过onComplete方法...

没有的 只注册了一次

我也遇到了

我这边又看了下以前的代码, 如果是ACTION_UP事件和ACTION_CANCEL事件同时被触发的话,还真会出现两次。但是我这拿我的几部手机做了下实验,ACTION_UP事件和ACTION_CANCEL事件好像不会同时出现。能发下你的手机型号吗?

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        mEventX = event.getX();
        mEventY = event.getY();
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                downEventDeal(mEventX, mEventY);
                break;
            case MotionEvent.ACTION_MOVE:
                moveEventDeal(mEventX, mEventY);
                break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                upEventDeal();
                break;
        }
        // 2.重绘
        postInvalidate();
        return true;
    }