2013-09-04 1 views
11

Я использую среду Picasso для обработки загрузки изображений в своем приложении для Android. После загрузки изображения мне нужно получить доступ к Drawable, чтобы применить некоторые маскирующие операции. Проблема в том, что Picasso преобразует Drawable в PicassoDrawable, и простой откат к Drawable не работает.Как получить доступ к Drawable при использовании Picasso?

Это код, у меня есть:

 Picasso.with(mContext).load(image.getPath()).into(mImageView, new Callback() { 

      @Override 
      public void onSuccess() { 

       Util.applyMask(imageView); 
      } 

      @Override 
      public void onError() { 
      } 
     }); 

и (ImageView) Метод Util.applyMask:

public static void applyMask(ImageView imageView) { 

    // this is where a class cast exception happens since it's actually a PicassoDrawable and not a Drawable 
    Bitmap mainImage = ((BitmapDrawable) imageView.getDrawable()).getBitmap(); 

// ... 
} 

Возможное решение дается Jake Wharton в этом вопросе GitHub: https://github.com/square/picasso/issues/38

Подводя итог, предлагается следующее: «Если вы хотите получить доступ к растровому изображению напрямую, вам необходимо использовать целевые обратные вызовы. PicassoDrawable используется для разрешения fa ding и индикатор отладки ».

Я не совсем уверен, как получить доступ к обратному вызову цели. Кто-нибудь знает, как это решить?

Спасибо.

ответ

33

Это был дан ответ на GitHub (https://github.com/square/picasso/issues/38):

private Target target = new Target() { 
     @Override 
     public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {  
     } 

     @Override 
     public void onBitmapFailed() { 
     } 
    } 

private void loadBitmap() { 
    Picasso.with(this).load("url").into(target); 
} 
+0

кредитов: @dnkoutso – Henrique

+4

Вы должны рассмотреть вопрос о применении маски, а не с помощью 'Transformation'. Это позволит избежать работы над основным потоком, а также Picasso будет кэшировать окончательное растровое изображение в памяти. Если вы попросите его снова, вам больше не придется выполнять эту работу. – dnkoutso

+0

Вы должны также отметить ответ как правильно :) – dnkoutso