美文网首页
Fresco基础用法

Fresco基础用法

作者: johnnycmj | 来源:发表于2017-08-11 10:38 被阅读303次

    背景

    facebook开源的一个强大的图片加载组件。使用之后,不需要关心图片的加载和显示这些繁琐的事情,支持Android2.3以上版本.

    依赖

    build.gradle 文件添加

    //fresco
    compile 'com.facebook.fresco:fresco:0.12.0'
    // 支持 GIF 动图,需要添加
    compile 'com.facebook.fresco:animated-gif:0.12.0'
    

    初始化

    使用fresco之前必须先初始化,只需要调用Fresco.initialize一次即可完成初始化,一般在Application中初始化。

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

    使用

    简单的使用直接用fresco 的 SimpleDraweeView 即可,其有两种运用方式,一种直接在xml中配置,一种的java代码中设置。

    xml的使用

    <com.facebook.drawee.view.SimpleDraweeView
      android:id="@+id/my_image_view"
      android:layout_width="20dp"
      android:layout_height="20dp"
      fresco:fadeDuration="300"
      fresco:actualImageScaleType="focusCrop"
      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"
      fresco:overlayImage="@drawable/watermark"
      fresco:pressedStateOverlayImage="@color/red"
      fresco:roundAsCircle="false"
      fresco:roundedCornerRadius="1dp"
      fresco:roundTopLeft="true"
      fresco:roundTopRight="false"
      fresco:roundBottomLeft="false"
      fresco:roundBottomRight="true"
      fresco:roundWithOverlayColor="@color/corner_color"
      fresco:roundingBorderWidth="2dp"
      fresco:roundingBorderColor="@color/border_color"
    />
    
    
    
    • fadeDuration: 动画持续时间,默认300ms
    • actualImageScaleType: 要显示的图片的scaleType,默认CENTER_CROP
    • placeholderImage: 加载中占位图
    • setPlaceholderImageScaleType:加载中占位图scaleType.默认CENTER_INSIDE
    • failureImage:加载失败的图片。
    • failureImageScaleType:加载失败的图caleType.默认CENTER_INSIDE
    • retryImage:点击重新加载图。在加载失败时,可以设置点击重新加载。这时提供一个图片,加载失败时,会显示这个图片(而不是失败提示图片),提示用户点击重试。需在在ControllerBuilder 中如下设置:.setTapToRetryEnabled(true)
    • retryImageScaleType:重新加载图caleType。
    • progressBarImage:加载进度图。
    • progressBarImageScaleType:加载进度图caleType.默认CENTER_INSIDE
    • backgroundImage:设置背景图,当指定一个背景图列表的时候,列表中的第一项会被首先绘制,绘制在最下层,然后依次往上绘制。背景图片不支持缩放类型
    • overlayImage:设置叠加图,当指定的叠加图是一个列表的时候,列表第一个元素会被先绘制,最后一个元素最后被绘制到最上层,不支持各种缩放类型
    • pressedStateOverlayImage:设置按压状态下的叠加图
    • roundAsCircle:true or false,是否圆圈。
    • roundedCornerRadius:设置圆角.
    • roundTopLeft: 以下4个角是否开启圆角。
    • roundTopRight
    • roundBottomLeft:
    • roundBottomRight
    • roundWithOverlayColor:圆角和边框之间的颜色
    • roundingBorderWidth: 边框宽度
    • roundingBorderColor:边框颜色.

    设置显示图片:

    mDraweeView.setImageURI(URL);
    

    java代码设置

    一般情况下,在XML设置显示效果即可, 如果想更多定制化,可以创建一个 builder 然后设置给 DraweeView:

    GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(getResources());
        GenericDraweeHierarchy hierarchy = builder
                .setFadeDuration(300)
                .setActualImageScaleType(ScalingUtils.ScaleType.FOCUS_CROP)
                .setPlaceholderImage(R.drawable.default_avatar)
                .setPlaceholderImageScaleType(ScalingUtils.ScaleType.FIT_CENTER)
                .setFailureImage(R.drawable.image_error)
                .setFailureImageScaleType(ScalingUtils.ScaleType.FIT_CENTER)
                .setRetryImage(R.drawable.fallback_nodata)
                .setRetryImageScaleType(ScalingUtils.ScaleType.FIT_CENTER)
                .setPressedStateOverlay(getResources().getDrawable(R.drawable.communication))
                .build();
                
        /**
         * SimpleDraweeView 有两个方法可以设置所要加载显示图片,简单的方法就是setImageURI。
         * 如果你需要对加载显示的图片做更多的控制和定制,那就需要用到DraweeController
         *
         */
        DraweeController controller = Fresco.newDraweeControllerBuilder()
                .setUri(URL)
                .setTapToRetryEnabled(true)
                .setOldController(mDraweeView1.getController())
                .setControllerListener(listener)
                .build();
    
    
        mDraweeView1.setHierarchy(hierarchy);
        mDraweeView1.setController(controller);
        
    

    设置点击重新加载图 .setTapToRetryEnabled(true)

    图片下载监听事件

    private ControllerListener listener = new BaseControllerListener<ImageInfo>(){
        @Override
        public void onFinalImageSet(String id, ImageInfo imageInfo, Animatable animatable) {
    
            if (imageInfo == null) {
                return;
            }
            QualityInfo qualityInfo = imageInfo.getQualityInfo();
            LogHelper.d("Final image received! " +
                            "Size %d x %d" + imageInfo.getWidth()+" "+imageInfo.getHeight()+
                    "Quality level %d "+qualityInfo.getQuality()+" good enough: %s "+qualityInfo.isOfGoodEnoughQuality()+ "full quality: %s "+qualityInfo.isOfFullQuality());
    
        }
    
        @Override
        public void onIntermediateImageSet(String id, ImageInfo imageInfo) {
            super.onIntermediateImageSet(id, imageInfo);
        }
    
        @Override
        public void onFailure(String id, Throwable throwable) {
            super.onFailure(id, throwable);
        }
    };
    
    • onFinalImageSet:加载成功后触发
    • onFailure :加载失败后触发
    • onIntermediateImageSet: 渐进式JPEG解码后回调.

    相关文章

      网友评论

          本文标题:Fresco基础用法

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