Fresco

作者: 小赵不在 | 来源:发表于2020-05-08 09:57 被阅读0次

依赖 implementation 'com.facebook.fresco:fresco:1.12.1'
网络权限 <uses-permission android:name="android.permission.INTERNET"/>
初始化Fresco 只需要一次即可

package com.example.day13;

import android.app.Application;


import com.facebook.drawee.backends.pipeline.Fresco;

public class FrascaoApplication extends Application {
   @Override
   public void onCreate() {
       super.onCreate();
       //初始化Fresco 只需要一次即可
       Fresco.initialize(this);
   }
   //高级初始化-配置缓存文件夹
DiskCacheConfig diskConfig = DiskCacheConfig.newBuilder(this)
               .setBaseDirectoryPath(new File("/storage/emulated/0/fresco"))
               .build();
       ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this)
               .setMainDiskCacheConfig(diskConfig)
               .build();
       Fresco.initialize(this, config);
}

注册FrescoApplication android:name=".FrascaoApplication"
在Activity中加载图片

public class MainActivity extends AppCompatActivity {

   private SimpleDraweeView sdv;
   private String netUrl = "http://www.qubaobei.com//ios//cf//uploadfile//132//3//2127.jpg";
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       initView();
   }

   private void initView() {
       sdv = (SimpleDraweeView) findViewById(R.id.sdv);
       sdv.setImageURI(netUrl);
   }
}

在xml中配置SimpleDraweeView,注意SimpleDraweeView不能使用wrap_content,只能用match_parent,或者固定的宽和高

<com.facebook.drawee.view.SimpleDraweeView
       android:layout_width="200dp"
       android:layout_height="200dp"
       app:layout_constraintTop_toTopOf="parent"
       app:layout_constraintLeft_toLeftOf="parent"
       app:layout_constraintBottom_toBottomOf="parent"
       app:layout_constraintRight_toRightOf="parent"
       android:id="@+id/sdv"
       app:roundedCornerRadius="20dp"
       app:roundingBorderWidth="2dp"
       app:roundingBorderColor="@color/colorAccent"/>

其他属性:

<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" 描边的颜色。
/>

也可以代码配置:

//新建一个DraweeHierarchyBuilder类
GenericDraweeHierarchyBuilder builder =new GenericDraweeHierarchyBuilder(getResources());
//设置的到图片的缩放类型
builder.setActualImageScaleType(ScalingUtils.ScaleType.FOCUS_CROP);
//缩放类型为focusCrop时,需要设定一个居中点
//(0f,0f)表示左上对齐显示,(1f,1f)表示右下对齐显示
PointF pf = new PointF(1f,1f);
builder.setActualImageFocusPoint(pf);
//进度条,占位图片消失,加载图片展现的时间间隔
builder.setFadeDuration(1000);
//加载失败之后显示的图片及图片缩放类型
builder.setFailureImage(R.drawable.imgbg, ScalingUtils.ScaleType.CENTER_INSIDE);
//设置占位图片及缩放类型
builder.setPlaceholderImage(R.drawable.imgbg, ScalingUtils.ScaleType.FIT_CENTER);
//加载进度条图片及缩放类型
builder.setProgressBarImage(R.drawable.progress_bar, ScalingUtils.ScaleType.CENTER_INSIDE);
//提示重新加载的图片及缩放类型
builder.setRetryImage(R.mipmap.ic_launcher, ScalingUtils.ScaleType.CENTER_CROP);
//设置背景图片
builder.setBackground(getResources().getDrawable(R.color.colorWhite));
//在图片上方覆盖一个图片资源
builder.setOverlay(getResources().getDrawable(R.drawable.overlay));
builder.setPressedStateOverlay(getResources().getDrawable(R.color.colorBlack));
RoundingParams rp = new RoundingParams();
//是否要将图片剪切成圆形
rp.setRoundAsCircle(false);
//设置哪个角需要变成圆角
rp.setCornersRadii(100f,0f,100f,0f);
//圆角部分填充色
rp.setOverlayColor(getResources().getColor(R.color.colorWhite));
//边框宽度
rp.setBorderWidth(20f);
//边框填充色
rp.setBorderColor(getResources().getColor(R.color.colorBlack));
builder.setRoundingParams(rp);
//得到DraweeHierarchy实例
GenericDraweeHierarchy hierachy = builder.build();
//在Drawee中设置DraweeHierarchy
mSdv.setHierarchy(hierachy);

拿到缓存的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/tayxnhtx.html