При использовании Picasso с рендерерами элементов в списке / сетке я в конечном итоге использовал интерфейс ListeningTarget
, который предоставляет библиотека:
Создайте собственный класс, который расширяет ImageView
и реализует ListeningTarget
.
public class PicassoImageView extends ImageView implements ListeningTarget
{...}
В переопределенном onBitmapLoaded
вызове метода this.setImageBitmap(bmp);
, где bmp - это параметр, который Пикассо передает как растровое изображение загруженного изображения:
@Override
public void onBitmapLoaded(Bitmap bmp, LoadedFrom loadedFrom)
{
Log.d("Picasso", "Image loaded");
this.setImageBitmap(bmp);
}
Используйте этот класс для экземпляра img
в вашем макете.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" ...>
[...]
<com.your.packagename.PicassoImageView
android:id="@+id/renderer_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content" ... />
[...]
</RelativeLayout>
И инициализируйте его так:
PicassoImageView img = (PicassoImageView) findViewById(R.id.renderer_icon);
Измените свой призыв к Пикассо, чтобы:
Picasso.with(this.ctx).load(contact.getPhotoURI())
.placeholder(R.drawable.contact_no_picture)
.into((ListeningTarget)img);
Конечно, не обязательно, чтобы ImageView
реализовывал ListeningTarget
, но я обнаружил, что это проще, чем искать нужное представление каждый раз, когда Пикассо загружает растровое изображение.
person
rekaszeru
schedule
15.05.2014