2013-09-04 13 views
11

Używam frameworka Picasso do obsługi ładowania obrazów w mojej aplikacji na Androida. Po załadowaniu obrazu muszę uzyskać dostęp do karty Szuflady, aby zastosować niektóre operacje maskowania. Problem polega na tym, że Picasso konwertuje Drawable na PicassoDrawable, a prosty rzut z powrotem do Drawable nie działa.Jak uzyskać dostęp do opcji Drawable przy użyciu Picassa?

Jest to kod ma: przycisk (ImageView) Metoda Util.applyMask

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

      @Override 
      public void onSuccess() { 

       Util.applyMask(imageView); 
      } 

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

oraz:

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

// ... 
} 

Możliwym rozwiązaniem jest przez Jake Wharton w tym github emisji: https://github.com/square/picasso/issues/38

Podsumowując, rozwiązaniem jest: "Jeśli chcesz uzyskać bezpośredni dostęp do bitmapy, musisz użyć wywołań zwrotnych Target." PicassoDrawable służy do umożliwienia fa ding i wskaźnik debugowania. "

Nie jestem do końca pewien, jak uzyskać dostęp do docelowego wywołania zwrotnego. Ktoś wie, jak rozwiązać ten problem?

Dzięki.

Odpowiedz

33

Ten odpowiedział na 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

punktów: @dnkoutso – Henrique

+4

Należy rozważyć zastosowanie maski poprzez 'Transformation' zamiast. Pozwoli to uniknąć pracy nad głównym wątkiem, a także Picasso będzie przechowywać w pamięci podręcznej końcową bitmapę w pamięci. Jeśli poprosisz o to ponownie, nie będziesz musiał ponownie wykonywać pracy. – dnkoutso

+0

Powinieneś również oznaczyć odpowiedź jako poprawną :) – dnkoutso