首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android Picasso 加載網絡圖片設置為 RelativeLayout 背景

     編輯:程式設計疑難解答

需求

RelativeLayout 背景圖片來自網絡 URL,已引入 Picasso 庫。

實現方案:自定義 Target

RelativeLayout rl = findViewById(R.id.my_layout);
String imageUrl = "https://example.com/bg.jpg";

Target target = new Target() {
    @Override
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
        // 設置背景,注意 API 版本兼容
        Drawable drawable = new BitmapDrawable(getResources(), bitmap);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            rl.setBackground(drawable);
        } else {
            rl.setBackgroundDrawable(drawable);
        }
    }

    @Override
    public void onBitmapFailed(Exception e, Drawable errorDrawable) {
        // 加載失敗可設置默認背景
        rl.setBackgroundResource(R.drawable.default_bg);
    }

    @Override
    public void onPrepareLoad(Drawable placeHolderDrawable) {
        // 可設置佔位圖
        rl.setBackgroundDrawable(placeHolderDrawable);
    }
};

// 關鍵:持有 target 引用,防止被 GC 回收導致回調不執行
rl.setTag(target);

Picasso.get()
    .load(imageUrl)
    .into(target);

注意事項

  • 必須持有 `Target` 實例引用(如 `setTag`),否則 Picasso 內部弱引用會導致回調丟失。
  • 若需適配圖片縮放,可在 `onBitmapLoaded` 中根據布局尺寸縮放 Bitmap。
  • Glide 庫同理可用 `into(new CustomTarget() {...})` 實現。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved