我遇到了毕加索的问题,我有一个自定义适配器,通过以下方式加载图像:
Picasso.with(this.ctx).load(contact.getPhotoURI())占位符(R.drawable.contact_no_picture).into(IMG);
将其加载到放置在GridView内的ImageView中。
结果如下:
正如您所看到的,图像是半载的,在某些情况下,根本没有加载。
我错过了什么吗?
答案 0 :(得分:2)
在列表/网格中使用Picasso和项目渲染器时,我最终使用了lib提供的ListeningTarget
接口:
创建一个扩展ImageView
并实现ListeningTarget
的自定义类。
public class PicassoImageView extends ImageView implements ListeningTarget
{...}
在重写的onBitmapLoaded
方法调用this.setImageBitmap(bmp);
中,其中bmp是Picasso作为加载的图像的位图传递的参数:
@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
,但我发现每次Picasso加载位图时都比搜索正确的视图更容易。