Fresco
一、依赖引入(Gradle)
在 app/build.gradle
中添加:
Groovy
dependencies {
// 核心库(必选)
implementation 'com.facebook.fresco:fresco:3.1.3' // 2025年最新稳定版[3,5](@ref)
// 扩展功能(按需添加)
implementation 'com.facebook.fresco:animated-gif:3.1.3' // GIF动图支持[3](@ref)
implementation 'com.facebook.fresco:webpsupport:3.1.3' // WebP静态图支持[3](@ref)
implementation 'com.facebook.fresco:animated-webp:3.1.3' // WebP动图支持[3](@ref)
}
二、基本使用
1.工具类封装(线程安全 + 功能聚合)
java
import android.net.Uri;
import android.content.Context;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.interfaces.DraweeController;
import com.facebook.drawee.view.SimpleDraweeView;
import com.facebook.imagepipeline.common.ResizeOptions;
import com.facebook.imagepipeline.request.ImageRequest;
import com.facebook.imagepipeline.request.ImageRequestBuilder;
/**
* Fresco图片加载工具类
* 功能:初始化、图片加载、圆角/渐进式/GIF控制
*/
public class FrescoUtils {
// 初始化(Application中调用一次)
public static void init(Context context) {
Fresco.initialize(context);[2,3](@ref)
}
// 基础加载(网络/本地图片)
public static void loadImage(String url, SimpleDraweeView view) {
view.setImageURI(Uri.parse(url));[2,5](@ref)
}
// 高级加载(支持圆角、渐进式、缩略图)
public static void loadImageWithOptions(
String url,
SimpleDraweeView view,
float cornerRadius,
boolean isProgressive
) {
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(url))
.setProgressiveRenderingEnabled(isProgressive) // 渐进式加载[2](@ref)
.setResizeOptions(new ResizeOptions(300, 300)) // 压缩尺寸(优化内存)[6](@ref)
.build();
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setImageRequest(request)
.setOldController(view.getController())
.build();
// 动态设置圆角
if (cornerRadius > 0) {
view.getHierarchy().setRoundingParams(
RoundingParams.fromCornersRadius(cornerRadius)
);[5,6](@ref)
}
view.setController(controller);
}
// 加载GIF动图(自动播放)
public static void loadGif(String url, SimpleDraweeView view) {
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setUri(Uri.parse(url))
.setAutoPlayAnimations(true) // 自动播放[2](@ref)
.build();
view.setController(controller);[3](@ref)
}
}
2. 初始化(全局一次)
java
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
FrescoUtils.init(this);
}
}
3. XML布局
XML
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/iv_avatar"
android:layout_width="120dp"
android:layout_height="120dp"
fresco:placeholderImage="@drawable/ic_placeholder" <!-- 占位图 -->
fresco:failureImage="@drawable/ic_error" /> <!-- 失败图[5](@ref) -->
4. 代码调用
java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SimpleDraweeView ivAvatar = findViewById(R.id.iv_avatar);
SimpleDraweeView ivBanner = findViewById(R.id.iv_banner);
// 基础加载(网络图片)
FrescoUtils.loadImage(
"https://example.com/avatar.jpg",
ivAvatar
);
// 高级加载(圆角+渐进式)
FrescoUtils.loadImageWithOptions(
"https://example.com/banner.jpg",
ivBanner,
20f, // 圆角半径(单位dp)
true // 启用渐进式加载
);
// 加载GIF
FrescoUtils.loadGif(
"https://example.com/anim.gif",
findViewById(R.id.iv_gif)
);
}
}
Picasso
一、依赖引入(Gradle)
在 app/build.gradle
中添加:
Groovy
dependencies {
implementation 'com.squareup.picasso:picasso:2.71828'
}
二、基本使用
1.工具类封装(线程安全 + 功能聚合)
java
import android.widget.ImageView;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.Transformation;
/**
* Picasso图片加载工具类
* 功能:统一配置占位图/错误图/尺寸裁剪/图片变换
*/
public class PicassoUtils {
// 基础加载(网络/本地资源)
public static void loadImage(String url, ImageView imageView) {
Picasso.get()
.load(url)
.into(imageView);
}
// 高级加载(占位图+错误图+尺寸调整)
public static void loadImageWithPlaceholder(
String url,
ImageView imageView,
int placeholderRes,
int errorRes,
int width,
int height
) {
Picasso.get()
.load(url)
.placeholder(placeholderRes) // 加载中占位图[1,6](@ref)
.error(errorRes) // 加载失败图
.resize(width, height) // 尺寸调整[7](@ref)
.centerCrop() // 居中裁剪
.into(imageView);
}
// 自定义图片变换(如圆角、灰度化)
public static void loadWithTransformation(
String url,
ImageView imageView,
Transformation transformation
) {
Picasso.get()
.load(url)
.transform(transformation) // 自定义变换[7](@ref)
.into(imageView);
}
// 取消图片加载请求(防止内存泄漏)
public static void cancelRequest(ImageView imageView) {
Picasso.get().cancelRequest(imageView); [1](@ref)
}
}
2. Activity/Fragment 中使用
java
// 基础加载
PicassoUtils.loadImage(
"https://example.com/image.jpg",
findViewById(R.id.iv_avatar)
);
// 高级加载(占位图+错误图+尺寸裁剪)
PicassoUtils.loadImageWithPlaceholder(
"https://example.com/banner.jpg",
findViewById(R.id.iv_banner),
R.drawable.placeholder, // 占位图资源
R.drawable.error, // 错误图资源
300, // 目标宽度(像素)
300 // 目标高度(像素)
);
// 自定义圆角变换
Transformation transformation = new RoundedCornersTransformation(20, 0); // 圆角半径20px
PicassoUtils.loadWithTransformation(
"https://example.com/icon.png",
findViewById(R.id.iv_icon),
transformation
);
// 在onDestroy中取消请求
@Override
protected void onDestroy() {
PicassoUtils.cancelRequest(findViewById(R.id.iv_avatar)); [1](@ref)
super.onDestroy();
}
3. RecyclerView 适配器中使用
java
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
String imageUrl = dataList.get(position).getImageUrl();
if (imageUrl == null || imageUrl.isEmpty()) {
// 无URL时加载默认图
PicassoUtils.loadImageWithPlaceholder(
null,
holder.imageView,
R.drawable.default_img,
R.drawable.error_img,
100,
100
);
} else {
// 正常加载网络图
PicassoUtils.loadImage(imageUrl, holder.imageView); [4](@ref)
}
}
Glide
一、依赖引入(Gradle)
在 app/build.gradle
中添加:
Groovy
dependencies {
// 核心库(需与AndroidX兼容)
implementation 'com.github.bumptech.glide:glide:4.16.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0' // 注解处理器
// 可选扩展(按需添加)
implementation 'com.github.bumptech.glide:okhttp3-integration:4.16.0' // 使用OkHttp网络层
implementation 'jp.wasabeef:glide-transformations:4.3.0' // 图片变换(模糊/圆角等)
}
二、基本使用
1.工具类封装(线程安全 + 功能聚合)
java
import android.content.Context;
import android.widget.ImageView;
import androidx.annotation.DrawableRes;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions;
import jp.wasabeef.glide.transformations.BlurTransformation;
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
/**
* Glide图片加载工具类(线程安全)
*/
public class GlideUtils {
// 基础加载(网络/本地资源)
public static void loadImage(Context context, String url, ImageView imageView) {
Glide.with(context)
.load(url)
.into(imageView);
}
// 带占位图+错误图+缓存策略
public static void loadImageWithPlaceholder(
Context context, String url, ImageView imageView,
@DrawableRes int placeholder, @DrawableRes int errorRes
) {
RequestOptions options = new RequestOptions()
.placeholder(placeholder)
.error(errorRes)
.diskCacheStrategy(DiskCacheStrategy.ALL); // 缓存所有版本
Glide.with(context)
.load(url)
.apply(options)
.into(imageView);
}
// 指定尺寸 + 圆角处理
public static void loadImageWithSizeAndCorner(
Context context, String url, ImageView imageView,
int width, int height, int cornerRadius
) {
RequestOptions options = new RequestOptions()
.override(width, height)
.transform(new RoundedCornersTransformation(cornerRadius, 0));
Glide.with(context)
.load(url)
.apply(options)
.into(imageView);
}
// 高斯模糊效果(用于背景图)
public static void loadBlurImage(
Context context, String url, ImageView imageView, int blurRadius
) {
Glide.with(context)
.load(url)
.apply(RequestOptions.bitmapTransform(new BlurTransformation(blurRadius)))
.into(imageView);
}
// 加载GIF(自动播放)
public static void loadGif(Context context, String url, ImageView imageView) {
Glide.with(context)
.asGif()
.load(url)
.into(imageView);
}
// 清理缓存(内存+磁盘)
public static void clearCache(Context context) {
Glide.get(context).clearMemory(); // 主线程执行
new Thread(() -> Glide.get(context).clearDiskCache()).start(); // 子线程执行
}
}
2. Activity/Fragment中使用
java
// 基础加载
GlideUtils.loadImage(
context,
"https://example.com/image.jpg",
findViewById(R.id.iv_avatar)
);
// 带占位图+错误图
GlideUtils.loadImageWithPlaceholder(
context,
"https://example.com/banner.jpg",
findViewById(R.id.iv_banner),
R.drawable.placeholder, // 加载中显示
R.drawable.error // 加载失败显示
);
// 指定尺寸+圆角
GlideUtils.loadImageWithSizeAndCorner(
context,
"https://example.com/icon.png",
findViewById(R.id.iv_icon),
200, // 宽度(px)
200, // 高度(px)
20 // 圆角半径(px)
);
// 高斯模糊背景
GlideUtils.loadBlurImage(
context,
"https://example.com/bg.jpg",
findViewById(R.id.iv_background),
25 // 模糊半径
);
3. RecyclerView适配器中使用
java
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
String imageUrl = dataList.get(position).getImageUrl();
GlideUtils.loadImageWithPlaceholder(
holder.itemView.getContext(),
imageUrl,
holder.imageView,
R.drawable.default_item,
R.drawable.error_item
);
}
@Override
public void onViewRecycled(ViewHolder holder) {
// 防止图片错位
Glide.with(holder.imageView).clear();
}