2014-08-27 110 views
14

我使用picasso庫來下載圖像並將圖像加載到imageView中。現在我想知道如何在imageViews中加載它們之前獲取圖像寬度和高度?使用畢加索庫獲取圖像寬度和高度

我有一個適配器,其中包含兩個imageView(其中一個是垂直的,另一個是水平的)的列表視圖。取決於我想要將圖像加載到其中一個圖像瀏覽的圖像寬度和高度。

+0

入住這http://stackoverflow.com/questions/8880376/how-to-get-height-and-width-of-a-image-used-in-android – Aniruddha 2014-08-27 08:56:56

+0

你可以用'INT finalHeight = iv.getMeasuredHeight(); int finalWidth = iv.getMeasuredWidth();',其中'iv'是您的ImageView對象。 – Aniruddha 2014-08-27 08:58:01

+0

@Aniruddha它只是在imageview加載圖像後工作!但我想知道圖像大小befor加載 – user2549089 2014-08-27 09:03:27

回答

28

只能下載後得到位圖的尺寸 - 你必須使用同步方法調用是這樣的:

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

在此之後可以再次調用具有相同的URL加載(它會從緩存中獲取):

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

編輯:也許更好的辦法:

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

只是爲了完成答案:你不能在主線程中進行此調用,因爲它是同步的。因此,您需要啓動例如一個AsyncTask,它在後臺執行此操作,並在加載圖像時返回。 – Klaus 2014-09-25 08:21:58

+0

此外,這與RecyclerView不兼容 – 2016-03-08 07:35:46

+0

由於畢加索的異步性質,以及'ViewHolders'將被回收的事實,'RecyclerView'效果不佳,因爲您的'ViewHolders'將被回收(滾動瀏覽Feed時大量圖像彈出到不正確的位置因爲他們正在加載到他們的舊視圖)。 – 2016-08-26 03:39:03

1

爲我工作。

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

爲什麼要在onSuccess方法中再次加載圖像? – 2017-10-03 13:27:49

相關問題