câu hỏi liên quan here on stackoverflow.
NẾU hình ảnh của bạn được tải xuống từ internet, .getIntrinsicWidth()
và .getIntrinsicHeight()
thực sự cung cấp cho bạn chiều rộng và chiều cao "thực" của hình ảnh.
Nó được gọi là nội tại, vì nó chỉ phụ thuộc vào hình ảnh và không có gì khác (chẳng hạn như điện thoại của bạn).
Than ôi, những gì bạn nhận được KHÔNG phải là nội tại trong mọi trường hợp - nó không phụ thuộc vào những thứ khác ngoài hình ảnh.
Đây là nơi bạn nhận được kết quả sai (cụ thể là không nội tại).Giả sử bạn đang sử dụng biểu tượng trình chạy mặc định, sau đó
Log.i("", "ic_launcher intrinsic width " + getResources().getDrawable(R.drawable.ic_launcher).getIntrinsicWidth());
sẽ cho bạn biết chiều rộng (tính bằng pixel) của biểu tượng trình khởi chạy. Nhưng cái nào? - bạn có một vài trong số đó, một trong thư mục draw-xhdpi, một trong thư mục drawable-hdpi, vâng, nếu thiết bị của bạn là xhdpi, nó cung cấp cho bạn 96, thực sự là chiều rộng pixel của phiên bản biểu tượng trình khởi chạy nằm trong thư mục draw-xhdpi. Bây giờ, xóa biểu tượng trong thư mục draw-xhdpi và chạy lại (vẫn sử dụng thiết bị xhdpi (thực hoặc giả lập)). Hình ảnh sẽ được sử dụng sẽ từ thư mục drawable-hdpi, vì đó là "gần nhất" với phiên bản xhdpi. Biểu tượng đó có chiều rộng pixel là 72. Nhưng ở trên mã S ST S ST ĐẾN BẠN 96 !!!
Điều đó rõ ràng KHÔNG "nội tại" (theo đúng nghĩa của từ), vì nó không chỉ phụ thuộc vào hình ảnh được sử dụng. Vì vậy, nếu bạn lười biếng như tôi, và do đó không tạo ra 4 phiên bản của mỗi biểu tượng/hình ảnh tài nguyên (nhưng thay vì chỉ sử dụng 1 hoặc 2, và mở rộng quy mô bằng tay), bạn phải cẩn thận với androidal được đề cập nhầm lẫn.
câu trả lời chính xác tại đây http://stackoverflow.com/questions/6536418/android-why-are-the-width-height-of-the-drawable-in-imageview-wrong – mathheadinclouds