You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Fresco库中setImageURI(url)已废弃,应使用何种替代方法?

解决Fresco中setImageURI()废弃的替代方案

嘿,我之前也碰到过这个问题!Fresco更新后确实把setImageURI(Uri)标记为废弃了,不过官方已经给出了更灵活的替代方案,主要通过ImageRequest或DraweeController来实现,下面给你详细拆解两种常用方式:

1. 基础图片加载:使用setImageRequest()

如果只是简单加载一张图片,不需要额外配置,这是最直接的替代写法:

// 把图片URL解析为Uri
Uri imageUri = Uri.parse("你的图片URL地址");
// 从Uri创建基础的ImageRequest
ImageRequest imageRequest = ImageRequest.fromUri(imageUri);
// 获取你的SimpleDraweeView实例
SimpleDraweeView draweeView = findViewById(R.id.your_drawee_view);
// 设置图片请求
draweeView.setImageRequest(imageRequest);

2. 自定义加载配置:用ImageRequestBuilder构建请求

如果需要添加占位图、失败图、缩放规则等自定义配置,推荐用ImageRequestBuilder来构建更灵活的请求:

Uri imageUri = Uri.parse("你的图片URL地址");

ImageRequest imageRequest = ImageRequestBuilder.newBuilderWithSource(imageUri)
        .setPlaceholderImageResId(R.drawable.placeholder_img) // 设置加载中占位图
        .setFailureImageResId(R.drawable.failure_img) // 设置加载失败图
        .setResizeOptions(new ResizeOptions(300, 300)) // 按需设置图片缩放尺寸
        .setAutoRotateEnabled(true) // 自动识别图片EXIF信息并旋转
        .build();

SimpleDraweeView draweeView = findViewById(R.id.your_drawee_view);
draweeView.setImageRequest(imageRequest);

3. 简洁写法:使用setController()

如果你习惯用控制器的方式管理图片加载,也可以通过Fresco.newDraweeControllerBuilder()快速设置:

SimpleDraweeView draweeView = findViewById(R.id.your_drawee_view);
draweeView.setController(Fresco.newDraweeControllerBuilder()
        .setUri("你的图片URL地址")
        .setAutoPlayAnimations(true) // 如果是动图,开启自动播放
        .build());

为什么setImageURI()会被废弃?

官方的核心原因是统一图片加载的配置入口——原来的setImageURI()只能传递Uri,无法扩展更多加载参数(比如缓存策略、请求拦截器等)。而新的方式通过ImageRequest和DraweeController,能让开发者更灵活地控制整个图片加载流程,适配更多复杂业务场景。

内容的提问来源于stack exchange,提问作者Armen Hovhannisian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:26:00