Fresco

作者: HOLLE_karry | 来源:发表于2020-05-08 19:38 被阅读0次

1.前言

Fresco框架的设计主要采用的是MVC模式。DraweeView实现了View的功能,DraweeHierarchy实现了Model的功能,DraweeController实现Controller的功能。

2.用法

⑴依赖

implementation 'com.facebook.fresco:fresco:1.12.1'

⑵在进行图片加载之前,需要配置Fresco类,Fresco.initialize只需要调用一次,所以我们在Application中进行初始化

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

⑶在AndroidManifest.xml中配置MyApplication,如果要从网络下载图片,还需要添加网络访问权限

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

⑷在xml中配置SimpleDraweeView,注意SimpleDraweeView不能使用wrap_content

   <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/sdv"
        android:layout_width="match_parent"
        app:placeholderImage="@mipmap/ic_launcher"
        android:layout_height="match_parent" />

⑸在Activity中加载图片

private String mUrl = "https://ws1.sinaimg.cn/large/0065oQSqgy1fze94uew3jj30qo10cdka.jpg";
mSdv.setImageURI(mUrl);

⑹其他属性

<com.facebook.drawee.view.SimpleDraweeView
  android:layout_width="20dp"
  android:layout_height="20dp"
  fresco:fadeDuration="300" // 淡出时间,毫秒。
  fresco:actualImageScaleType="focusCrop" // 等同于android:scaleType。
  fresco:placeholderImage="@color/wait_color" // 加载中…时显示的图。
  fresco:placeholderImageScaleType="fitCenter" // 加载中…显示图的缩放模式。
  fresco:failureImage="@drawable/error" // 加载失败时显示的图。
  fresco:failureImageScaleType="centerInside" // 加载失败时显示图的缩放模式。
  fresco:retryImage="@drawable/retrying" // 重试时显示图。
  fresco:retryImageScaleType="centerCrop" // 重试时显示图的缩放模式。
  fresco:progressBarImage="@drawable/progress_bar" // 进度条显示图。
  fresco:progressBarImageScaleType="centerInside" // 进度条时显示图的缩放模式。
  fresco:progressBarAutoRotateInterval="1000" // 进度条旋转时间间隔。
  fresco:backgroundImage="@color/blue" // 背景图,不会被View遮挡。
  fresco:roundAsCircle="false" // 是否是圆形图片。
  fresco:roundedCornerRadius="1dp" // 四角圆角度数,如果是圆形图片,这个属性被忽略。
  fresco:roundTopLeft="true" // 左上角是否圆角。
  fresco:roundTopRight="false" // 右上角是否圆角。
  fresco:roundBottomLeft="false" // 左下角是否圆角。
  fresco:roundBottomRight="true" // 左下角是否圆角。
  fresco:roundingBorderWidth="2dp" // 描边的宽度。
  fresco:roundingBorderColor="@color/border_color" 描边的颜色。
/>

⑺拿到缓存的Bitmap

ImageRequest imageRequest = ImageRequestBuilder
                .newBuilderWithSource(Uri.parse(mUrl))
                .setProgressiveRenderingEnabled(true)
                .build();
        ImagePipeline imagePipeline = Fresco.getImagePipeline();
        DataSource<CloseableReference<CloseableImage>> dataSource = imagePipeline.fetchDecodedImage
                (imageRequest, this);
        dataSource.subscribe(new BaseBitmapDataSubscriber() {
            @Override
            protected void onNewResultImpl(@Nullable Bitmap bitmap) {
                mIv.setImageBitmap(bitmap);
            }
            @Override
            protected void onFailureImpl(DataSource<CloseableReference<CloseableImage>> dataSource) {
            }
        }, CallerThreadExecutor.getInstance());

相关文章

网友评论

      本文标题:Fresco

      本文链接:https://www.haomeiwen.com/subject/okdfnhtx.html