|
|
|
@ -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);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|