2012-05-02 42 views
15

Trong mã của tôi, tôi có một Image View trong bố cục XML và tôi tiếp tục thay đổi hình ảnh nguồn cho mã này trong mã của tôi. Bây giờ tôi muốn biết chiều rộng và chiều cao của hình ảnh được tạo ra mỗi lần.Cách lấy chiều rộng và chiều cao của Chế độ xem hình ảnh trong Android?

tôi đã cố gắng sử dụng getWidth(), getHeight(),getMeasuredWidth(),getMeasuredHeight(), nhưng tất cả họ đều trở về 0.

Làm thế nào tôi có thể có được điều này?

Trả lời

40

Bạn gọi số điện thoại getWidth()getHeight() trên ImageView ở đâu? Nếu bạn gọi từ onCreate() trong hoạt động, nó sẽ không hoạt động. Bạn cần đợi cửa sổ hoạt động được đính kèm và sau đó gọi getWidth() and getHeight() trên ImageView. Bạn có thể thử gọi getWidth() and getHeight() từ onWindowFocusChanged() phương thức hoạt động của mình.

@Override 
public void onWindowFocusChanged(boolean hasFocus){ 
    int width=imageView.getWidth(); 
    int height=imageView.getHeight(); 
} 
+0

trả về số không lần đầu tiên hình ảnh được tải, và sau đó kích thước chính xác mỗi lần sau đó .. – Odaym

+3

Làm thế nào để làm điều này trong một đoạn? –

+0

onWindowFocusChanged chỉ hoạt động trên API18 trở lên và không thể là cách tốt nhất ... tuy nhiên, nhờ –

1

Cách bạn thực hiện tham chiếu đến đối tượng hình ảnh là sai. Đó là lý do tại sao bạn được cho không tất cả thời gian. đầu tiên tạo một đối tượng bitmap từ imageview và lấy chiều rộng và chiều cao từ nó.

Khi chụp ảnh từ cam tôi làm như sau và nó hoạt động như một nét duyên dáng.

Bitmap image2 = (Bitmap) data1.getExtras().get("data"); 
double width = Double.valueOf(image2.getWidth()); 
Log.v("WIDTH", String.valueOf(width)); 
double height = Double.valueOf(image2.getHeight()); 
Log.v("height", String.valueOf(height)); 

Hy vọng nó sẽ giúp ích cho bạn.

14

thử này

ImageView iv=(ImageView)findViewById(R.id.image); 
ViewTreeObserver vto = iv.getViewTreeObserver(); 
    vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
     public boolean onPreDraw() { 
      finalHeight = iv.getMeasuredHeight(); 
      finalWidth = iv.getMeasuredWidth(); 
      Log.e("hilength","Height: " + finalHeight + " Width: " + finalWidth); 
      return true; 
     } 
    }); 
+0

cảm ơn rất nhiều. mã này hoạt động quá, nhưng tôi đoán giải pháp được cung cấp bởi Veer sẽ phù hợp hơn. – Ankit

1

Trước tiên, bạn phải chuyển đổi hình ảnh để mutablebitmap và cố gắng để có được chiều rộng và chiều cao của hình ảnh và chủ yếu này sẽ giải quyết vấn đề của bạn ..

Bitmap Rbitmap = Bitmap.createBitmap(bitmap).copy(
        Config.ARGB_4444, true); 

Rbitmap.getWidth(); 
Rbitmap.getheight(); 
+1

Câu hỏi đặt ra là cách lấy chiều cao và chiều rộng của chế độ xem hình ảnh không phải là một bitmap. –

4

thử mã này

int finalHeight, finalWidth; 
final ImageView iv = (ImageView)findViewById(R.id.scaled_image); 
final TextView tv = (TextView)findViewById(R.id.size_label); 
ViewTreeObserver vto = iv.getViewTreeObserver(); 
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
    public boolean onPreDraw() { 
     iv.getViewTreeObserver().removeOnPreDrawListener(this); 
     finalHeight = iv.getMeasuredHeight(); 
     finalWidth = iv.getMeasuredWidth(); 
     tv.setText("Height: " + finalHeight + " Width: " + finalWidth); 
     return true; 
    } 
}); 

nó thực sự làm việc ...

1

Hãy thử giải pháp này:

Bitmap bitmap = ((BitmapDrawable)imageView.getBackground()).getBitmap(); 
int width = bitmap.getWidth(); 
int height = bitmap.getHeight(); 
4

nếu bạn thiết lập ImageView đối tượng vẽ được, và chiều cao của ImageView và loại chiều rộng là WRAP_CONTENT, bạn có thể nhận được chiều cao và chiều rộng của ImageView bằng cách này ngay cả khi bạn gọi từ onCreate()

int height = imageView.getDrawable().getIntrinsicHeight(); 
int width = imageView.getDrawable().getIntrinsicWidth(); 
Các vấn đề liên quan