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