如何在使用Picasso时访问Drawable?

Hen*_*que 13 android android-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() {
            }
        }); 
Run Code Online (Sandbox Code Playgroud)

和Util.applyMask(ImageView)方法:

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();

// ... 
}
Run Code Online (Sandbox Code Playgroud)

Jake Wharton在这个github问题中给出了一个可能的解决方案:https://github.com/square/picasso/issues/38

总而言之,解决方案是:"如果您想直接访问Bitmap,那么您将需要使用Target回调.PicassoDrawable用于允许淡入淡出和调试指示器."

我不确定如何访问Target回调.谁知道如何解决这个问题?

谢谢.

Hen*_*que 35

这是在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);
}
Run Code Online (Sandbox Code Playgroud)

  • 你应该考虑通过`Transformation`来应用掩码.这样可以避免在主线程上工作,Picasso也会在内存中缓存最终的位图.如果你再次要求它,你将不必再做这项工作. (4认同)