2014-06-06 11 views
29

Chcę użyć Picasso do załadowania trzech kolejnych obrazów jeden na drugim w widoku listy. Korzystanie z metod Picasso zapewnia to łatwo. Ponieważ jednak te obrazy ładują się w różnym czasie, powoduje to migotanie w momencie pojawienia się obrazów. Na przykład czasami obraz 2 pojawia się przed obrazem 1, a po załadowaniu obrazu 1 powoduje nienaturalne zacinanie. Byłoby lepiej, gdybym mógł ustawić widoczność listview na niewidoczną, dopóki wszystkie obrazy nie będą dostępne do pokazania. Jednak nie ma metody wywołania zwrotnego, którą mógłbym znaleźć dla Picassa, która sygnalizowałaby załadowanie obrazu.Odwołanie obrazu obciążenia Picasso

Czy ktoś zna rozwiązanie tego typu sytuacji za pomocą Picassa?

Dzięki

+1

@ ElectronicGeek Myślę, że sposób, w jaki OP zadał to pytanie, jest w porządku. Wyjaśnia on, co już zrobił w pytaniu (zaimplementował ładowanie obrazu, ale migocze) i pyta, czy Picasso oferuje jakieś wywołania zwrotne ładujące obraz, aby rozwiązać problem. Nic w tym złego. –

Odpowiedz

54

Metoda podaje drugi argument, który jest odwołaniem do sukcesu i niepowodzenia. Możesz użyć tego do śledzenia, kiedy wszystkie trzy zostały wezwane i działać na ich widoczność na raz.

Javadoc: https://square.github.io/picasso/2.x/picasso/com/squareup/picasso/RequestCreator.html#into-android.widget.ImageView-com.squareup.picasso.Callback-

+6

łącze jest zerwane –

+0

@jamrockRay powinien zostać naprawiony teraz –

+0

Oddzwonienie nie jest nazywane –

0

Można użyć obiektu Target. Po otrzymaniu oddzwonienia target1 można pobrać drugi zasób, a następnie uzyskać wywołanie zwrotne w target2, a następnie uruchomić trzecie pobranie.

+0

To marnotrawstwo i potrwa znacznie dłużej niż ładowanie jednocześnie. – zyamys

9

można wdrożyć zwrotnego z Picasso jak pokazano poniżej:

ImageHandler.getSharedInstance(getApplicationContext()).load(imString).skipMemoryCache().resize(width, height).into(image, new Callback() { 
      @Override 
      public void onSuccess() { 
       layout.setVisibility(View.VISIBLE); 
      } 

      @Override 
      public void onError() { 

      } 
     }); 
} 

Realizacja mojej klasie ImageHandler przedstawiono poniżej:

public class ImageHandler { 

    private static Picasso instance; 

    public static Picasso getSharedInstance(Context context) 
    { 
     if(instance == null) 
     { 
      instance = new Picasso.Builder(context).executor(Executors.newSingleThreadExecutor()).memoryCache(Cache.NONE).indicatorsEnabled(true).build(); 
     } 
     return instance; 
    } 
} 
20

Oto prosty przykład jak przywłaszczyć zdjęcie Picassa oddzwanianie:

Picasso.with(MainActivity.this) 
      .load(imageUrl) 
      .into(imageView, new com.squareup.picasso.Callback() { 
         @Override 
         public void onSuccess() { 
          //do smth when picture is loaded successfully 

         } 

         @Override 
         public void onError() { 
          //do smth when there is picture loading error 
         } 
        }); 
+0

Działa świetnie! Dzięki – Charleston