欢迎访问宙启技术站
智能推送

Android基于Fresco实现圆角和圆形图片

发布时间:2023-05-16 07:27:21

圆角和圆形图片是我们常常使用的图片效果,在Android中实现这两种效果的方法有很多种,其中一种较为简单的方法就是使用Facebook开源的图片加载库Fresco。

Fresco是Facebook在2015年推出的一款开源的Android图片加载库,它具有高效、快速、低内存占用的特点,并且还支持图片的多样化加载,例如gif、webp等格式。Fresco的使用方法也非常简单,只需要在XML布局文件中添加SimpleDraweeView标签即可加载图片。

下面我们就分别介绍如何使用Fresco实现圆角和圆形图片效果。

一、实现圆角图片效果

1. 首先我们需要在项目的build.gradle文件中加入Fresco依赖:

dependencies {
    implementation 'com.facebook.fresco:fresco:2.0.0'
}

2. 在需要加载图片的XML布局文件中添加SimpleDraweeView标签,并设置需要加载的图片路径和占位图等属性:

<com.facebook.drawee.view.SimpleDraweeView
          android:id="@+id/imageView"
          android:layout_width="200dp"
          android:layout_height="200dp"
          fresco:placeholderImage="@drawable/placeholder"
          fresco:roundAsCircle="false"
          fresco:roundingBorderColor="@color/colorAccent"
          fresco:roundingBorderWidth="1dp"
          fresco:roundingBorderPadding="0dp"
          fresco:roundingBorderRadius="20dp"
          fresco:fadeDuration="300"
          fresco:actualImageScaleType="centerCrop"
          fresco:actualImageUri="@{imageUrl}" />

其中,fresco:roundingBorderRadius="20dp"表示设置圆角的半径为20dp,其他属性的作用如下:

- fresco:roundAsCircle="false"表示不设置圆形效果,而是实现圆角效果;

- fresco:roundingBorderColor="@color/colorAccent"表示圆角边框的颜色;

- fresco:roundingBorderWidth="1dp"表示圆角边框的宽度;

- fresco:roundingBorderPadding="0dp"表示圆角边框和图片之间的距离;

- fresco:fadeDuration="300"表示图片渐变加载的时间;

- fresco:actualImageScaleType="centerCrop"表示图片的缩放类型,不设置则默认为Fit。

3. 在代码中为SimpleDraweeView设置控制器,并加载图片:

SimpleDraweeView imageView = findViewById(R.id.imageView);
Uri uri = Uri.parse(imageUrl);
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
            .setResizeOptions(new ResizeOptions(200, 200))
            .build();
RoundingParams roundingParams = RoundingParams.fromCornersRadius(20);
roundingParams.setBorderColor(getResources().getColor(R.color.colorAccent));
roundingParams.setBorderWidth(1);
roundingParams.setPadding(0);
roundingParams.setRoundAsCircle(false);
imageView.setHierarchy(new GenericDraweeHierarchyBuilder(getResources())
            .setRoundingParams(roundingParams)
            .build());
DraweeController controller = Fresco.newDraweeControllerBuilder()
            .setImageRequest(request)
            .setAutoPlayAnimations(true)
            .setOldController(imageView.getController())
            .build();
imageView.setController(controller);

其中,RoundingParams.fromCornersRadius(20)表示设置圆角半径为20,其他参数的作用如下:

- roundingParams.setRoundAsCircle(false)表示不设置圆形效果,而是实现圆角效果;

- roundingParams.setBorderColor(getResources().getColor(R.color.colorAccent))表示圆角边框的颜色;

- roundingParams.setBorderWidth(1)表示圆角边框的宽度;

- roundingParams.setPadding(0)表示圆角边框和图片之间的距离;

二、实现圆形图片效果

1. 在XML布局文件中添加SimpleDraweeView标签,并设置需要加载的图片路径和占位图等属性:

<com.facebook.drawee.view.SimpleDraweeView
          android:id="@+id/imageView"
          android:layout_width="200dp"
          android:layout_height="200dp"
          fresco:placeholderImage="@drawable/placeholder"
          fresco:roundAsCircle="true"
          fresco:fadeDuration="300"
          fresco:actualImageScaleType="centerCrop"
          fresco:actualImageUri="@{imageUrl}" />

其中,fresco:roundAsCircle="true"表示设置圆形效果,其他属性的作用同上方。

2. 在代码中为SimpleDraweeView设置控制器,并加载图片:

SimpleDraweeView imageView = findViewById(R.id.imageView);
Uri uri = Uri.parse(imageUrl);
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
            .setResizeOptions(new ResizeOptions(200, 200))
            .build();
RoundingParams roundingParams = RoundingParams.asCircle();
imageView.setHierarchy(new GenericDraweeHierarchyBuilder(getResources())
            .setRoundingParams(roundingParams)
            .build());
DraweeController controller = Fresco.newDraweeControllerBuilder()
            .setImageRequest(request)
            .setAutoPlayAnimations(true)
            .setOldController(imageView.getController())
            .build();
imageView.setController(controller);

其中,RoundingParams.asCircle()表示设置圆形效果,其他参数同上方。

以上就是使用Fresco实现圆角和圆形图片效果的方法,Fresco也提供了其他丰富的功能,有兴趣的读者可以进一步了解。