【问题标题】:add background image to android ListView using Picasso使用 Picasso 将背景图像添加到 android ListView
【发布时间】:2023-04-10 22:35:01
【问题描述】:

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

【问题讨论】:

    标签: android android-listview background-image picasso


    【解决方案1】:

    选项一

    定义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);
    

    【讨论】:

    • 这值得检查和 +1。谢谢。
    • 如果我在加载和进入之间调用调整大小,则永远不会调用 onBitmapLoaded。有没有办法解决这个问题?我希望能够调整大小。
    • @learner 这很奇怪。当我调用resize 时,在这两个示例中都调用了onBitmapLoaded。我调查了这个问题,发现this SO question 似乎很相关。希望这会有所帮助
    猜你喜欢
    • 2015-12-26
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 2015-11-06
    • 2012-04-09
    • 2011-06-01
    • 2017-01-14
    • 2013-12-16
    相关资源
    最近更新 更多