Подтвердить что ты не робот

Как получить доступ к Drawable при использовании Picasso?

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

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

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

            @Override
            public void onSuccess() {

                Util.applyMask(imageView);
            }

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

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

public static void applyMask(ImageView imageView) {

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

// ... 
}

Возможное решение дано Джейком Уортоном в этом выпуске github: https://github.com/square/picasso/issues/38

Подводя итог, решение: "Если вы хотите получить доступ к Bitmap напрямую, вам нужно будет использовать обратные вызовы Target. PicassoDrawable используется для разрешения затухания и индикатора отладки".

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

Спасибо.

4b9b3361

Ответ 1

Об этом ответил 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);
}