2014-08-27 20 views
14

Tôi đang sử dụng thư viện picasso để tải xuống và tải hình ảnh vào imageView. bây giờ tôi muốn biết làm thế nào tôi có thể nhận được chiều rộng và chiều cao hình ảnh trước khi tải chúng trong imageViews?nhận chiều rộng và chiều cao hình ảnh bằng thư viện picasso

tôi có chế độ xem danh sách với bộ điều hợp chứa hai imageView (một trong số đó là dọc và một là ngang). phụ thuộc vào chiều rộng và chiều cao của hình ảnh tôi muốn tải hình ảnh vào một trong các lần xem hình ảnh.

+0

Kiểm tra này http://stackoverflow.com/questions/8880376/how-to-get-height-and-width-of-a-image-used-in-android – Aniruddha

+0

Bạn có thể sử dụng 'int finalHeight = iv.getMeasuredHeight(); int finalWidth = iv.getMeasuredWidth(); ', trong đó' iv' là đối tượng ImageView của bạn. – Aniruddha

+0

@Aniruddha nó chỉ hoạt động sau khi tải hình ảnh trong imageview! nhưng tôi muốn biết kích thước hình ảnh trước khi tải rằng – user2549089

Trả lời

28

Bạn có thể nhận được kích thước Bitmap chỉ sau khi tải It - bạn phải sử dụng phương pháp gọi đồng bộ như thế này:

final Bitmap image = Picasso.with(this).load("http://").get(); 
int width = image.getWidth(); 
int height = image.getHeight(); 

Sau này bạn có thể gọi một lần nữa nạp với cùng url (Nó sẽ được lấy từ bộ nhớ cache):

Picasso.with(this).load("http://").into(imageView) 

Edit: Có lẽ tốt hơn theo cách:

Picasso.with(this).load("http://").into(new Target() { 
      @Override 
      public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
       int width = bitmap.getWidth(); 
       int height = bitmap.getHeight(); 
       imgView.setImageBitmap(bitmap); 
      } 

      @Override 
      public void onBitmapFailed(Drawable errorDrawable) { 

      } 

      @Override 
      public void onPrepareLoad(Drawable placeHolderDrawable) { 

      } 
     }); 
+3

Chỉ để hoàn thành câu trả lời: Bạn không thể thực hiện cuộc gọi này trong Main Thread, bởi vì nó là đồng bộ. Vì vậy, bạn cần phải bắt đầu ví dụ AsyncTask, thực hiện điều này trong nền và quay trở lại, khi hình ảnh được tải. – Klaus

+0

Điều này cũng không hiệu quả với RecyclerView –

+0

Điều này sẽ hoạt động kém với 'RecyclerView' do bản chất không đồng bộ của picasso kết hợp với thực tế là' ViewHolders' của bạn sẽ được tái chế (nhiều ảnh xuất hiện ở vị trí không chính xác khi cuộn qua nguồn cấp dữ liệu vì chúng đang được tải vào chế độ xem cũ của chúng). –

1

Làm việc cho tôi.

Picasso.with(context).load(imageLink).into(imageView, new Callback() { 
     @Override 
     public void onSuccess() { 
      Picasso.with(context).load(imageLink).into(new Target() { 
       @Override 
       public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
        int width = bitmap.getWidth(); 
        int height = bitmap.getHeight(); 
        Log.d("ComeHere ", " W : "+ width+" H : "+height); 
       } 

       @Override 
       public void onBitmapFailed(Drawable errorDrawable) { 

       } 

       @Override 
       public void onPrepareLoad(Drawable placeHolderDrawable) { 

       } 
      }); 

     } 

     @Override 
     public void onError() { 

     } 
    }); 
+0

Tại sao bạn lại tải lại hình ảnh bên trong phương thức onSuccess? –

Các vấn đề liên quan