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.
punktów: @dnkoutso – Henrique
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
Powinieneś również oznaczyć odpowiedź jako poprawną :) – dnkoutso