2014-09-12 29 views
10

Tôi đang sử dụng thư viện Picasso để tải hình ảnh từ url. Mã tôi đã sử dụng ở bên dưới.android get Hình ảnh có thể vẽ sau khi picasso tải

Picasso.with(getContext()).load(url).placeholder(R.drawable.placeholder) 
       .error(R.drawable.placeholder).into(imageView); 

Điều tôi muốn làm là tải hình ảnh từ url. Tôi đã sử dụng

Drawable image = imageView.getDrawable(); 

Tuy nhiên, điều này sẽ luôn trả về hình ảnh trình giữ chỗ thay vì tải hình ảnh từ url. Các bạn có ý kiến ​​gì không? Làm thế nào tôi nên truy cập vào hình ảnh drawable mà nó chỉ được tải từ url.

Xin cảm ơn trước.

Trả lời

17

Điều này là do hình ảnh đang tải không đồng bộ. Bạn cần phải nhận được drawable khi nó được tải xong vào xem:

Target target = new Target() { 
      @Override 
      public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
       imageView.setImageBitmap(bitmap); 
       Drawable image = imageView.getDrawable(); 
      } 

     @Override 
     public void onBitmapFailed(Drawable errorDrawable) {} 

     @Override 
     public void onPrepareLoad(Drawable placeHolderDrawable) {} 
    }; 

    Picasso.with(this).load("url").into(target); 
+0

Làm thế nào tôi có thể sử dụng loadBitmap()? Tôi cần gọi Picasso hai lần? – Shumin

+0

Không có chỉ là một phương pháp void bạn sẽ gọi để tải hình ảnh. Bạn không cần nó. (xem câu trả lời cập nhật) – Shane

+0

điều này là vô ích, 'phù hợp, centercrop' sẽ không hoạt động, những gì các điểm trong việc sử dụng Picasso sau đó ?? bạn có thể nhận drawable với callback Picasso bình thường: 'vào (targetImageView, Callback mới() { \t \t \t @ Override public void onSuccess() { targetImageView.getDrawable();}' – user924

1
 mImageView.post(new Runnable() { 
      @Override 
      public void run() { 
       mPicasso = Picasso.with(mImageView.getContext()); 
       mPicasso.load(IMAGE_URL) 
         .resize(mImageView.getWidth(), mImageView.getHeight()) 
         .centerCrop() 
         .into(mImageView, new com.squareup.picasso.Callback() { 
          @Override 
          public void onSuccess() { 
           Drawable drawable = mImageView.getDrawable(); 
           // ... 
          } 

          @Override 
          public void onError() { 
           // ... 
          } 
         }); 
      } 
     }); 
+1

Bạn có thể muốn thêm một số lời giải thích tại sao mã này giải quyết vấn đề. – mustaccio

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