代码之家  ›  专栏  ›  技术社区  ›  Henrique

使用Picasso时如何访问Drawable?

  •  13
  • Henrique  · 技术社区  · 11 年前

    我正在使用Picasso框架来处理我的Android应用程序中的图像加载。 加载图像后,我需要访问Drawable来应用一些掩蔽操作。问题是毕加索将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's actually a PicassoDrawable and not a Drawable
        Bitmap mainImage = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
    
    // ... 
    }
    

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

    总之,解决方案是:“如果你想直接访问位图,那么你需要使用Target回调。PicassoDrawable用于允许淡入和调试指示符。”

    我不太确定如何访问Target回调。有人知道如何解决这个问题吗?

    谢谢

    1 回复  |  直到 11 年前
        1
  •  35
  •   Henrique    11 年前

    这是在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);
    }