Fresco 图片框架简单使用

25 篇文章 0 订阅

Fresco 是一个Android的强大的图片加载组件。

相关链接

官网:https://www.fresco-cn.org/
GitHub:https://github.com/facebook/fresco
Demo: https://github.com/liaohuqiu/fresco-demo-for-gradle

使用前准备

在项目的build.gradle中引入Fresco,版本号可以用当前最新的

dependencies {
    implementation 'com.facebook.fresco:fresco:2.6.0'
}

因为需要下载图片,需要网络权限,在项目的AndroidManifest.xml需要有联网权限:

 <uses-permission android:name="android.permission.INTERNET" />

Fresco需要初始化一次,比如可以在Application的onCreate中。

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}

Drawee直接加载图片

Drawee是Fresco管理下的ImageView。使用他需要先完成前文的 使用前准备
xml文件加入要展示的图片

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/my_image_view"
    android:layout_width="130dp"
    android:layout_height="130dp"
  />

配置图片链接:

Uri uri = Uri.parse("https://img.alicdn.com/imgextra/i1/O1CN01NbMTSC22uUSxV99qv_!!6000000007180-2-tps-720-614.png");
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
draweeView.setImageURI(uri);

使用Image Pipeline获取下载的图片数据

Image pipeline 负责完成加载图像。使用他需要先完成前文的 使用前准备
下面是完成下载图片的回调,成功后调用onNewResultImpl返回bitmap是图片渲染信息。需要注意的是onNewResultImpl和onFailureImpl里面会调用dataSource.close(),这个dataSource后面是不能复用的,而且自己管理dataSource的话(比如直接取缓存的图片)需要close,否则内存泄露。
UiThreadImmediateExecutorService是默认提供的线程池,会使回调都在主线程。

ImageRequestBuilder requestBuilder = ImageRequestBuilder.newBuilderWithSource(uri);
ImageRequest imageRequest = requestBuilder.build();
DataSource<CloseableReference<CloseableImage>> dataSource = ImagePipelineFactory.getInstance().getImagePipeline().fetchDecodedImage(imageRequest, null);

BaseBitmapDataSubscriber subscriber = new BaseBitmapDataSubscriber() {
    @Override
    protected void onNewResultImpl(@Nullable Bitmap bitmap) {
        //下载成功
    }
    
    @Override
    protected void onFailureImpl(@NonNull DataSource<CloseableReference<CloseableImage>> dataSource) {
        String failMsg = dataSource.getFailureCause().getMessage();
        //下载失败
    }
    
    //请求结束前就取消时回调
    @Override
    public void onCancellation(@NonNull DataSource<CloseableReference<CloseableImage>> dataSource) {
        super.onCancellation(dataSource);
    }
    
    //请求进度回调
    @Override
    public void onProgressUpdate(@NonNull DataSource<CloseableReference<CloseableImage>> dataSource) {
        super.onProgressUpdate(dataSource);
    }
};
dataSource.subscribe(subscriber, UiThreadImmediateExecutorService.getInstance());
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值