Picasso图像未加载到GridView中

时间:2014-05-15 20:32:36

标签: android picasso

我遇到了毕加索的问题,我有一个自定义适配器,通过以下方式加载图像:

Picasso.with(this.ctx).load(contact.getPhotoURI())占位符(R.drawable.contact_no_picture).into(IMG);

将其加载到放置在GridView内的ImageView中。

结果如下:

enter image description here

正如您所看到的,图像是半载的,在某些情况下,根本没有加载。

我错过了什么吗?

1 个答案:

答案 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加载位图时都比搜索正确的视图更容易。