Hiện tại tôi đang sử dụng paintObject.measureText(textCopy.substring(0,i))
trong khi lặp qua bản sao văn bản của TextView. Ví dụ: measureText("abc".substring(0,1))
sẽ cho tôi toạ độ x tương đối của 'b'. Số tọa độ y tôi nhận được từ layout.getLineTop()
. Tính năng này hoạt động nhưng không chính xác cho các tọa độ x cho các đối tượng không monospaced phông chữ. Tôi có thể hiệu chỉnh một chút, nhưng trên mỗi thiết bị, nó hoạt động khác nhau.Tìm tọa độ chính xác của một ký tự đơn bên trong TextView
Giải pháp tốt nhất tôi có thể nghĩ là ghi đè lên lớp có trách nhiệm vẽ TextView trên màn hình và hy vọng có được tọa độ của từng ký tự được vẽ ra màn hình.
Có ai biết lớp tôi cần ghi đè để thực hiện việc này không? Hoặc có thể một số giải pháp sáng tạo khác?
Văn bản được cho là có chứa bất kỳ đánh dấu nào (như một số thẻ html) không? Nếu không, sau đó bạn có thể chỉ cần ghi đè lên "onDraw()" của TextView và vẽ văn bản như bạn vui lòng. –
Nó có thể chứa văn bản được mở rộng. – Igor
Cũng làm phức tạp mọi thứ một chút, trong "onDraw()" bạn sẽ phải render mỗi char dựa trên bất kỳ khoảng thời gian nào nó thuộc về, như in đậm hoặc in nghiêng bằng cách cập nhật 'Paint' đang được sử dụng để vẽ. –