2014-08-27 3 views
14

Я использую библиотеку picasso для загрузки и загрузки изображений в изображение. теперь я хочу знать, как я могу получить ширину и высоту изображения перед загрузкой их в imageViews?Получение ширины и высоты изображения с помощью библиотеки picasso

У меня есть список с адаптером, который содержит два изображения (один из них является вертикальным, а другой горизонтальным). зависит от ширины и высоты изображения. Я хочу загрузить изображение в одно из изображений.

+0

Проверить это http://stackoverflow.com/questions/8880376/how-to-get-height-and-width-of-a-image-used-in-android – Aniruddha

+0

Вы можете использовать 'INT finalHeight = iv.getMeasuredHeight(); int finalWidth = iv.getMeasuredWidth(); ', где' iv' - ваш объект ImageView. – Aniruddha

+0

@ Анирудда это просто работает после загрузки изображения в изображение! но я хочу знать размер изображения для загрузки, что – user2549089

ответ

28

Вы можете получить Bitmap размеров только после его загрузки - вы должны использовать синхронный вызов метода, как это:

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) 

Edit: Может быть, лучший способ:

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

+0

Также это не сработает с RecyclerView –

+0

Это будет плохо работать с 'RecyclerView' из-за асинхронного характера пикассо в сочетании с тем фактом, что ваши« ViewHolders »будут переработаны (при обращении к каналу много изображений, попавших в неправильные позиции потому что они загружаются в их прежний вид). –

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? –

Смежные вопросы