2015-03-25 14 views
6

Próbuję załadować tablicę 20 adresów URL w tle z Picasso. Do tej pory mam następny kod:Ładowanie wielu obrazów z Picasso na tle

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

A moja target obiekt jest następny:

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) {} 
    }; 

chcę wstępnie załadować obrazy więc mogę pokazać jeden po drugim w ImageView każdej chwili użytkownik klika przycisk.

Pierwsze zdjęcie ładuje się tak szybko (jest fajne), ale pozostałe obrazy w pętli for nigdy nie ładują się. Jak mogę to naprawić? Potrzebuję obrazów, aby rozpocząć ładowanie w pętli for.

+0

1.) ZAWSZE utrzymuj silną referencję do Picasso Targets gdzieś, ponieważ sam Picasso k eep a WeakReference - a obiekt docelowy zostanie zebrany jako śmieci przed załadowaniem obrazu. 2.) Nie jestem do końca pewien, ale z kodu źródłowego wydaje się, że Picasso obsłuży tylko jedno żądanie dla każdej instancji Target lub ImageView, którą przekażesz do 'into()' - może popatrzysz (dis-)potwierdzać. –

+0

@ david.mihola Jak mogę zachować silne odniesienie do celów Picassa? Co masz na myśli mówiąc "może spojrzeć na siebie (dis-) potwierdzić", czy jest to metoda? –

Odpowiedz

0

może można spróbować wykonać następujące czynności:

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

} 

Można sprecyzowane odnoszą się do przykładów here

Powiązane problemy