diff --git a/Notesmaster/app/src/main/java/net/micode/notes/ui/NoteEditText.java b/Notesmaster/app/src/main/java/net/micode/notes/ui/NoteEditText.java index 52fd50d..ded9ddb 100644 --- a/Notesmaster/app/src/main/java/net/micode/notes/ui/NoteEditText.java +++ b/Notesmaster/app/src/main/java/net/micode/notes/ui/NoteEditText.java @@ -100,25 +100,44 @@ public class NoteEditText extends EditText { // TODO Auto-generated constructor stub } + /** + * 处理触摸事件,实现文本选择功能 + * + * @param event 触摸事件对象,包含触摸位置等信息 + * @return 返回true表示已处理该事件,false表示未处理 + */ @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - + case MotionEvent.ACTION_DOWN: // 手指按下屏幕事件 + // 1. 获取触摸点的原始坐标 int x = (int) event.getX(); int y = (int) event.getY(); - x -= getTotalPaddingLeft(); - y -= getTotalPaddingTop(); - x += getScrollX(); - y += getScrollY(); + // 2. 调整坐标,去除内边距的影响 + x -= getTotalPaddingLeft(); // 减去左侧内边距 + y -= getTotalPaddingTop(); // 减去顶部内边距 + + // 3. 考虑滚动偏移量 + x += getScrollX(); // 加上水平滚动距离 + y += getScrollY(); // 加上垂直滚动距离 + + // 4. 获取文本布局对象 Layout layout = getLayout(); + + // 5. 根据y坐标获取行号 int line = layout.getLineForVertical(y); + + // 6. 根据x坐标获取该行内的字符偏移量 int off = layout.getOffsetForHorizontal(line, x); + + // 7. 设置文本选择位置 Selection.setSelection(getText(), off); + break; } + // 调用父类方法处理其他触摸事件(如移动、抬起等) return super.onTouchEvent(event); }