2013-09-04 28 views
11

Tôi đang sử dụng khung công tác Picasso để xử lý việc tải hình ảnh trong ứng dụng Android của mình. Sau khi hình ảnh được tải, tôi cần truy cập Drawable để áp dụng một số thao tác mặt nạ. Vấn đề là Picasso chuyển đổi Drawable thành PicassoDrawable, và một đoạn trích đơn giản trở lại Drawable không hoạt động.Làm thế nào để truy cập Drawable khi sử dụng Picasso?

Đây là mã tôi có:

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

      @Override 
      public void onSuccess() { 

       Util.applyMask(imageView); 
      } 

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

và phương pháp 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(); 

// ... 
} 

Một giải pháp có thể được đưa ra bởi Jake Wharton trong vấn đề github này: https://github.com/square/picasso/issues/38

Tóm lại, giải pháp là: "Nếu bạn muốn truy cập trực tiếp vào Bitmap thì bạn sẽ cần phải sử dụng lệnh gọi lại Mục tiêu. PicassoDrawable được sử dụng để cho phép fa ding và chỉ báo gỡ lỗi. "

Tôi không chắc chắn cách truy cập mục tiêu Gọi lại. Bất cứ ai cũng biết làm thế nào để giải quyết điều này?

Cảm ơn.

Trả lời

33

này được trả lời tại 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

tín: @dnkoutso – Henrique

+4

Bạn nên cân nhắc áp dụng mặt nạ qua một 'Transformation' để thay thế. Điều này sẽ tránh việc phải làm việc trên luồng chính và Picasso cũng sẽ lưu cache bitmap cuối cùng trong bộ nhớ. Nếu bạn yêu cầu nó một lần nữa bạn sẽ không phải làm công việc một lần nữa. – dnkoutso

+0

Bạn cũng nên đánh dấu câu trả lời là chính xác :) – dnkoutso

Các vấn đề liên quan