Tôi hiện đang làm việc để hiển thị bitmap, sau đó tôi muốn gửi tới máy in di động. Tuy nhiên, tôi đang đấu tranh với đo chiều cao của văn bản của tôi, vì vậy tôi có thể thăng tiến vị trí y một cách thích hợp.Android: Đo chiều cao văn bản trên Canvas
cấu hình bitmap/vải/sơn cơ bản của tôi là thế này (Font Size là 16 và kích thước của bitmap là 200x400 (chiều rộng x chiều cao):
public MyRenderer() {
// Initialize bitmap
bitmap = Bitmap.createBitmap(200, 400, Bitmap.Config.ARGB_8888);
// Initialize canvas
canvas = new Canvas(bitmap);
// Initialize brush (Paint instance)
brush = new Paint();
brush.setTextSize(16);
brush.setTypeface(Typeface.SANS_SERIF);
brush.setColor(Color.BLACK);
brush.setStyle(Paint.Style.FILL);
brush.setAntiAlias(true);
brush.setTextAlign(Align.LEFT);
}
Cho đến nay rất tốt, bây giờ những gì tôi muốn Do là: Nếu tôi sử dụng phương thức drawText của Paint, tôi cần cung cấp tọa độ x và y.Đối với x đó là zero (giả sử văn bản được căn trái) nhưng đối với y, tôi phải tính chiều cao của mỗi văn bản tôi in và thêm nó lên, vì vậy tôi có thể theo dõi vị trí y hiện tại của tôi
Và đây là nơi nó được lẻ: Tôi đang sử dụng phương pháp sau để xác định chiều cao của văn bản (sử dụng Pai nt phản đối mà tôi khởi tạo trước đó - nó được gọi là "bàn chải"):
public int measureHeight(String text) {
Rect result = new Rect();
// Measure the text rectangle to get the height
brush.getTextBounds(text, 0, text.length(), result);
return result.height();
}
Các phương pháp trên sẽ trả về giá trị sau cho văn bản sau đây:
- "Hello World" trả về một chiều cao của
- "Một thể hiện máy ảnh có thể được sử dụng để tính toán chuyển đổi 3D và tạo ma trận. "trả về chiều cao
- " Giới thiệu thiết kế Android: Nơi để tìm hiểu về nguyên tắc, khối xây dựng và mẫu để tạo giao diện người dùng Android đẳng cấp thế giới. Cho dù bạn là một người chuyên nghiệp về giao diện người dùng hay nhà phát triển đóng vai trò đó, những tài liệu này chỉ cho bạn cách đưa ra quyết định thiết kế tốt, lớn và nhỏ. "trả về một chiều cao của
Nó làm cho ý nghĩa với tôi, đó là số 2 và 3 trở lại chiều cao lớn hơn số 1 nhưng nếu một dòng có chiều cao là 12 (là số một không) - nó không có ý nghĩa gì, rằng nhiều dòng có chiều cao là 16?
Tôi có thiếu gì đó ở đây không? Có một phương pháp thuận tiện để đo chiều rộng của văn bản (sử dụng một thể hiện của paint và gọi measureText ("myText") hoạt động hoàn hảo, tuy nhiên tôi khá thua lỗ, khi nói đến chiều cao, như các kết quả được đưa ra ở trên không có ý nghĩa gì với tôi.EDIT
Tôi biết, rằng getTextBounds lẽ không có tính năng tự động gói văn bản đa rợp bóng, và đó là ok, tôi đã viết một phương pháp cho văn bản chia tách, nhưng ngay cả khi nó chỉ đo một dòng, trên cho giá trị độ dài vẫn có vẻ khó xảy ra.
tôi tính toán khoảng cách ban đầu (theo tính toán của bạn) cho những ba trên văn bản nhất định, nó luôn luôn trả 19. Would điều đó có nghĩa là, nếu tôi lấy 19 có chiều cao, vẫn còn đủ không gian cho dòng tiếp theo để không trùng với dòng hiện tại? Cảm ơn bạn rất nhiều trước! – AgentKnopf
Đó là một đặc tính của phông chữ, bạn không phải tính toán nhiều lần cho các văn bản khác nhau. Bạn muốn khoảng cách luôn giống nhau, bất kể ký tự của bạn bao gồm những gì. Và có, các dòng sẽ không chồng lên nhau. – devconsole
Cảm ơn bạn rất nhiều - đó là những gì tôi đã làm và hiển thị bitmap của tôi hoạt động tốt ngay bây giờ :). Tôi khởi tạo "chiều cao dòng" một lần trong hàm tạo của MyRenderer. – AgentKnopf