如何获取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
相关产品推荐
相关产品推荐

