Fresco ------------简单使用

 

 

implementation 'com.facebook.fresco:fresco:1.11.0'//frasco依赖
// 支持 WebP (静态图+动图),需要添加
    implementation 'com.facebook.fresco:animated-webp:1.11.0'
    implementation 'com.facebook.fresco:webpsupport:1.11.0'
    // 支持 GIF 动图,需要添加
    implementation 'com.facebook.fresco:animated-gif:1.11.0'
<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" 描边的颜色。
/>

这个使用非常简单 但是需要注意的是 需要在清单文件进行配置 不然不出现一点小意外 大家可以尝试一下

 

Fresco ------------简单使用
 引用场景一般为背景图片 

/** * 以高斯模糊显示。
 * * @param draweeView View。
 * @param url url. 
 * @param iterations 迭代次数,越大越魔化。
 * @param blurRadius 模糊图半径,必须大于0,越大越模糊。
 */

public static void showUrlBlur(SimpleDraweeView draweeView, String url, int iterations, int blurRadius) {
    try {
        Uri uri = Uri.parse(url);
        ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
                .setPostprocessor(new IterativeBoxBlurPostProcessor(iterations, blurRadius))
                .build();
        AbstractDraweeController controller = Fresco.newDraweeControllerBuilder()
                .setOldController(draweeView.getController())
                .setImageRequest(request)
                .build();
        draweeView.setController(controller);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

拿到缓存的Bitmap

 

/**
 * 加载图片成bitmap。
 *
 * @param imageUrl 图片地址。
 */
public static void loadToBitmap(String imageUrl, BaseBitmapDataSubscriber mDataSubscriber) {
    ImageRequest imageRequest = ImageRequestBuilder
        .newBuilderWithSource(Uri.parse(imageUrl))
        .setProgressiveRenderingEnabled(true)
        .build();

    ImagePipeline imagePipeline = Fresco.getImagePipeline();
    DataSource<CloseableReference<CloseableImage>> dataSource = imagePipeline.fetchDecodedImage
        (imageRequest, App.get());
    dataSource.subscribe(mDataSubscriber, CallerThreadExecutor.getInstance());
}
  • 用起来也很简单:
loadToBitmap(imageUrl, new BaseBitmapDataSubscriber() {
    @Override
    public void onNewResultImpl(@Nullable Bitmap bitmap) {
        // 读取成功。
    }

    @Override
    public void onFailureImpl(DataSource dataSource) {
        // 读取失败。
    }
});

 接下来是加载gif

在上边已经放入gif,webp 相应的依赖 接下来配置

效果图:

Fresco ------------简单使用

 Application


 // 高级初始化:
        Fresco.initialize(this, ImagePipelineConfig.newBuilder(SimApp.this).setMainDiskCacheConfig(

                DiskCacheConfig.newBuilder(this)
                        .setBaseDirectoryPath(new File(Environment.getExternalStorageDirectory().getAbsolutePath())) // 注意Android运行时权限。
                        .build()
        ).build());
    

MainActivity

 /*
        设置gif图片
         */
        AbstractDraweeController controller = Fresco.newDraweeControllerBuilder()
                //图片地址
                .setUri(webp)
                //播放gif 图片
                .setAutoPlayAnimations(true)
                //点击重新加载时 可以重新加载4 次
                .setTapToRetryEnabled(true)
                .build();
        msimpleDraweeView.setController(controller);

记得配置Application 

总结:

Fresco 是一个强大的图片加载组件。使用它之后,你不需要再去关心图片的加载和显示这些繁琐的事情! 支持 Android 2.3 及以后的版本

加载Gif图和WebP动图在任何一个Android开发者眼里看来都是一件非常头疼的事情。每一帧都是一张很大的Bitmap,每一个动画都有很多帧。Fresco让你没有这些烦恼,它处理好每一帧并管理好你的内存。