You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Android Studio中aritraroy/PatternLockView组件的(X,Y)坐标

获取PatternLockView的点击坐标方案

嘿,我刚好熟悉这个PatternLockView库,给你两个实用的方案来获取图案锁组件的点击/触摸坐标,根据你的需求选就行:

方案一:直接监听PatternLockView的触摸事件(获取所有实时坐标)

如果你需要的是用户在图案锁上触摸过程中的所有实时坐标(不只是选中的节点),直接给PatternLockView实例设置OnTouchListener就可以,比给根视图设置更精准,还不会干扰其他视图:

// 先获取你的PatternLockView实例
PatternLockView mPatternLockView = findViewById(R.id.your_pattern_lock_id);

// 设置触摸监听器
mPatternLockView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // 监听按下和移动事件,按需调整
        if (event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE) {
            // 获取相对于PatternLockView自身的坐标
            float relativeX = event.getX();
            float relativeY = event.getY();
            // 如果需要相对于屏幕的绝对坐标,用下面这两个
            float screenX = event.getRawX();
            float screenY = event.getRawY();
            
            // 这里可以做你需要的逻辑,比如打印坐标
            Log.d("PatternCoords", "相对坐标: X=" + relativeX + ", Y=" + relativeY);
            Log.d("PatternCoords", "屏幕坐标: X=" + screenX + ", Y=" + screenY);
        }
        // 返回false,保证PatternLockView的默认图案识别逻辑正常执行
        return false;
    }
});

方案二:利用PatternLockViewListener获取选中节点的坐标

如果你只需要用户绘制图案时选中的那些节点的坐标,可以用库自带的PatternLockViewListener,在进度回调里拿到选中的节点:

PatternLockView mPatternLockView = findViewById(R.id.your_pattern_lock_id);

final PatternLockViewListener mPatternLockViewListener = new PatternLockViewListener() {
    @Override
    public void onPatternStarted() {
        // 图案绘制开始时的逻辑,可选
    }

    @Override
    public void onPatternProgress(List<PatternLockDot> progressPattern) {
        // 每次选中新节点时触发,拿到最新选中的节点坐标
        if (!progressPattern.isEmpty()) {
            PatternLockDot lastSelectedDot = progressPattern.get(progressPattern.size() - 1);
            // 节点相对于PatternLockView的坐标
            int dotX = lastSelectedDot.getX();
            int dotY = lastSelectedDot.getY();
            
            Log.d("PatternDotCoords", "选中节点坐标: X=" + dotX + ", Y=" + dotY);
        }
    }

    @Override
    public void onPatternComplete(List<PatternLockDot> pattern) {
        // 图案绘制完成时的逻辑,可选
    }

    @Override
    public void onPatternCleared() {
        // 图案被清除时的逻辑,可选
    }
};

// 记得给PatternLockView添加这个监听器
mPatternLockView.addPatternLockListener(mPatternLockViewListener);

小提醒

之前你给根视图设置OnTouchListener的做法可能会导致触摸事件冲突,建议直接给PatternLockView实例设置监听器,这样只会响应图案锁区域的触摸,逻辑更清晰~

内容的提问来源于stack exchange,提问作者tsanmi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:46:57