2015-03-25 28 views
6

Tôi đang cố gắng tải một mảng gồm 20 url trong nền bằng Picasso. Cho đến nay tôi có mã tiếp theo:Tải nhiều hình ảnh với Picasso trên nền

Log.d("GAME", "Loading all images"); 
for (int i = gamePieces.length-1; i >= 0; i--) { 
    GamePiece p = gamePieces[i]; 
    Log.d("GAME", "I will load " + p.getImage()); 
    Picasso.with(context).load(p.getImage()).into(target); 
} 
//loading the first one 
Picasso.with(context).load(piece.getImage()).into(target); 

Và đối tượng target của tôi là tiếp theo một:

Target target = new Target() { 
     @Override 
     public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
      Log.d("GAME", "Image loaded" + ++test); 
      gameImage.setImageBitmap(bitmap); //ImageView to show the images 
     } 

     @Override 
     public void onBitmapFailed(Drawable arg0) {} 

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

Tôi muốn trước tải những hình ảnh vì vậy tôi có thể hiển thị từng người một trong ImageView bất cứ lúc nào người dùng nhấp vào một nút.

Hình ảnh đầu tiên tải quá nhanh (thật tuyệt) nhưng các hình ảnh khác ở vòng lặp for không bao giờ tải. Làm thế nào tôi có thể sửa lỗi này? tôi cần những hình ảnh để bắt đầu tải trong vòng lặp for.

+0

1.) LUÔN LUÔN giữ một tham chiếu mạnh mẽ để Picasso mục tiêu một nơi nào đó bởi vì Picasso chính nó sẽ chỉ k eep một WeakReference - và Target sẽ được thu thập rác trước khi tải hình ảnh được thực hiện. 2.) Tôi không hoàn toàn chắc chắn, nhưng từ mã nguồn có vẻ như Picasso sẽ chỉ xử lý một yêu cầu cho mỗi trường hợp của Target hoặc ImageView mà bạn chuyển vào một 'vào()' - có thể có một cái nhìn chính mình để (dis-)xác nhận. –

+0

@ david.mihola Làm thế nào tôi có thể giữ một tham chiếu mạnh mẽ đến các mục tiêu Picasso? Bạn có ý nghĩa gì bởi "có thể có một cái nhìn chính mình để (dis-) xác nhận" là một phương pháp? –

Trả lời

0

có lẽ bạn có thể thử làm như sau:

Picasso mPicasso = Picasso.with(context); //Single instance 

//if you are indeed loading the first one this should be in top, before the iteration. 
Picasso.with(context).load(piece.getImage()).into(target); 

Log.d("GAME", "Loading all images"); 
for (int i = gamePieces.length-1; i >= 0; i--) { 

    GamePiece p = gamePieces[i]; 
    Log.d("GAME", "I will load " + p.getImage()); 
    mPicasso.load(p.getImage()).into(target); 

} 

Bạn nhất luôn có thể tham khảo những ví dụ here

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