android - 使用 Picasso 将背景图片添加到 Android ListView

标签 android android-listview background-image picasso

我需要向 ListView 添加背景图像。通常我会调用 listview.setBackground(myImage)。但是图像来自服务器,所以我需要使用 Picasso 将图像加载到我的 ListView 的背景中。我该怎么做?

最佳答案

选项一

定义com.squareup.picasso.Target的匿名子类

Picasso.with(yourContext)
      .load(yourImageUri)
      .into(new Target() {
        @Override
        @TargetApi(16)
        public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
            int sdk = android.os.Build.VERSION.SDK_INT;
            if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
                yourListView.setBackgroundDrawable(new BitmapDrawable(bitmap));
            } else {
                yourListView.setBackground(new BitmapDrawable(getResources(), bitmap));
            }
        }

        @Override
        public void onBitmapFailed(Drawable errorDrawable) {
            // use error drawable if desired
        }

        @Override
        public void onPrepareLoad(Drawable placeHolderDrawable) {
            // use placeholder drawable if desired
        }
    });

选项二

子类 ListView 并实现 com.squareup.picasso.Target

public class PicassoListView extends ListView implements Target {

    public PicassoListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public PicassoListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    @TargetApi(16)
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
        int sdk = android.os.Build.VERSION.SDK_INT;
        if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
            setBackgroundDrawable(new BitmapDrawable(bitmap));
        } else {
            setBackground(new BitmapDrawable(getResources(), bitmap));
        }
    }

    @Override
    public void onBitmapFailed(Drawable errorDrawable) {
        // use error drawable if desired
    }

    @Override
    public void onPrepareLoad(Drawable placeHolderDrawable) {
        // use placeholder drawable if desired
    }

}

这让你可以这样做:

Picasso.with(yourContext)
          .load(yourImageUri)
          .into(yourListView);

关于android - 使用 Picasso 将背景图片添加到 Android ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26207716/

相关文章:

android - 暂停协程功能,直到收到结果,然后继续

java - 在 android 数组适配器中使用 notifyDataSetChanged 时出错

android - 如何在 Android 中即时刷新自定义适配器列表?

android - 在自定义 ListView 中处理 imageButton 单击

html - div 中的背景图像不会以绝对位置显示

css - Firefox 为每个类重新下载背景图像?

Android:为什么在 Gradle 中签名配置需要明确的密码?

java - 来自 Android 设备的 REST Web 服务调用

java - 在滚动 ListView 中,单选按钮未被选中

resize - 如何通过 CSS 3 调整和放大图像(如 Sprite 图标)?