Fresco加载资源图片是黑色问题

本文介绍使用Fresco加载应用资源图片时遇到的问题及解决方案。通过调整加载方式,解决了打包后图片显示为黑色的问题。

使用fresco加载资源图片,根据官网的方法:

这里写图片描述

Uri uri = Uri.parse("res://" + "应用包名"+"/"+ R.drawable.xxx);
simpleDraweeView.setAspectRatio(0.8f);//我的图片要宽高比
simpleDraweeView.setImageURI(uri);

直接运行效果挺好的,但是打完包以后,本来显示好好的图片变成了一片黑色
我换了一张图片,发现另外一张图片是没有问题的,其实可以找UI从新给图的,但是找到另一种解决方案

simpleDraweeView.setAspectRatio(0.8f);
ImageRequest request=ImageRequestBuilder.newBuilderWithResourceId(R.drawable.xxx)
        .build();
PipelineDraweeController controller = (PipelineDraweeController)
        Fresco.newDraweeControllerBuilder()
                .setImageRequest(request)
                .setOldController(simpleDraweeView.getController())
                .build();
simpleDraweeView.setController(controller);
Android 应用中使用 Fresco 加载资源图片是一项常见任务,Fresco 是 Facebook 推出的强大图片加载库,支持从网络、本地存储和本地资源加载图片Fresco 的 Drawees 提供了丰富的功能,例如显示占位符、自动释放内存等[^1]。 ### 使用 Fresco 加载资源图片 要在应用中加载资源图片(例如 `res/drawable` 中的图片),可以使用 Fresco 提供的 `DraweeController` 和 `Uri` 的 `newUri` 方法来实现。以下是具体步骤和代码示例: 1. **初始化 Fresco** 在应用的 `Application` 类中初始化 Fresco: ```java public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); } } ``` 2. **在布局文件中使用 SimpleDraweeView** 在 XML 布局文件中添加 Fresco 的 `SimpleDraweeView`: ```xml <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/my_image_view" android:layout_width="match_parent" android:layout_height="200dp" fresco:placeholderImage="@drawable/placeholder" fresco:placeholderImageScaleType="centerCrop" fresco:actualImageScaleType="centerCrop" /> ``` 3. **加载资源图片** 在 Activity 或 Fragment 中加载资源图片: ```java SimpleDraweeView draweeView = findViewById(R.id.my_image_view); int resourceId = R.drawable.my_image; // 替换为你的资源 ID Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + resourceId); draweeView.setImageURI(uri); ``` 4. **加载资源图片的其他方式** Fresco 还支持通过 `DraweeController` 和 `ImageRequest` 来加载资源图片。例如: ```java DraweeController controller = Fresco.newDraweeControllerBuilder() .setImageRequest(ImageRequest.fromUri(Uri.parse("android.resource://" + getPackageName() + "/" + R.drawable.my_image))) .setOldController(draweeView.getController()) .build(); draweeView.setController(controller); ``` ### Fresco 的优势 - **资源管理**:Fresco 的 Drawees 在图片从屏幕上消失时会自动释放内存,避免内存泄漏。 - **占位符支持**:可以通过 XML 属性轻松设置占位符图片,提升用户体验。 - **灵活性**:Fresco 提供了多种配置选项,支持自定义图片加载逻辑和缓存策略。 ### Fresco 的局限性 - **学习曲线**:与其他图片加载库(如 Picasso 和 Glide)相比,Fresco 的 API 更加复杂,需要一定的学习成本。 - **资源占用**:Fresco 的功能强大,但可能会增加应用的内存和 CPU 占用。 ### 与其他库的比较 - **Picasso**:Picasso 提供了更简单的 API,适合快速加载图片,但在处理复杂需求时需要额外的自定义代码[^3]。 - **Glide**:Glide 提供了与 Fresco 类似的功能,但更注重性能优化,特别是在处理大型图片时[^5]。 - **Volley**:Volley 是 Google 推出的网络请求库,虽然支持图片加载,但功能相对基础。 ### 相关问题 1. Fresco 和 Glide 在 Android 图片加载中的性能对比是什么? 2. Fresco 是否支持加载圆形图片? 3. Fresco 的 Drawee 是什么,如何使用? 4. Fresco 是否支持图片缓存? 5. Fresco 和 Picasso 在加载资源图片时有什么区别?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值