- Facebook 出品的一个强大的图片加载组件 Fresco
尽信书,不如无书—能学到什么?
1、SimpleDraweeView最基本的使用
2、SimpleDraweeView的圆形图
3、SimpleDraweeView的圆角图
4、SimpleDraweeView的缩放类型
工欲善其事必先利其器—下载Fresco并导入到项目
Fresco中文说明:http://www.fresco-cn.org/
Fresco项目GitHub地址:https://github.com/facebook/fresco
Fresco项目GitHub地址
![第一步 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_xml](https://file.cfanz.cn/uploads/png/2023/02/08/7/4e04Z556TR.png)
第二步添加Fresco到项目工程:
![使用说明 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_android_02](https://file.cfanz.cn/uploads/png/2023/02/08/7/9B3QL741JH.png)
第三步服务及权限:
<!-- 访问网络的权限 -->
<uses-permission android:name="android.permission.INTERNET"/>- 1
- 2
![服务及权限 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_android_03](https://file.cfanz.cn/uploads/png/2023/02/08/7/ODY73a88R7.png)
常见问题:
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/main_adv"
android:layout_width="300dp"
android:layout_height="300dp"
android:layout_centerInParent="true"
></com.facebook.drawee.view.SimpleDraweeView>
</RelativeLayout>- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
代码分析:
![初次加载 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_ico_04](https://file.cfanz.cn/uploads/png/2023/02/08/7/Cb66083PQ8.png)
MainActivity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
简单的书写完布局和实现代码之后我们来运行一下。
java.lang.RuntimeException: Unable to start activity ComponentInfo{scp.com.frescodemo/scp.com.frescodemo.MainActivity}:
android.view.InflateException: Binary XML file line #5: Error inflating class com.facebook.drawee.view.SimpleDraweeView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2264)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2313)
at android.app.ActivityThread.access$1100(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1238)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5336)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #5: Error inflating class com.facebook.drawee.view.SimpleDraweeView- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
![报错 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_ico_05](https://file.cfanz.cn/uploads/png/2023/02/08/7/MF0VdI925c.png)
运行报错了!怎么回事呢?这里啊,是因为我们没有在应用调用 setContentView() 之前进行初始化Fresco造成的;解决办法:
MainActivity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Fresco.initialize(this);
setContentView(R.layout.activity_main);
}
}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
![解决办法 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_android_06](https://file.cfanz.cn/uploads/png/2023/02/08/7/PaebfTN99Z.png)
再运行就没有错误发生了。
占位图—placeholderImage:
icon_placeholder.png
![icon_placeholder Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_ico_07](https://file.cfanz.cn/uploads/png/2023/02/08/7/TA7IFe8816.png)
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/main_adv"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_centerInParent="true"
fresco:placeholderImage="@mipmap/icon_placeholder"
fresco:placeholderImageScaleType="fitCenter"
></com.facebook.drawee.view.SimpleDraweeView>
</RelativeLayout>- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
代码说明:
![占位符 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_ico_08](https://file.cfanz.cn/uploads/png/2023/02/08/7/IK103eR854.png)
MainActivity
![占位符 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_Fresco_09](https://file.cfanz.cn/uploads/png/2023/02/08/7/680I7QfT6K.png)
正在加载图—progressBarImage:
icon_progress_bar.png
![正在加载图 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_android_10](https://file.cfanz.cn/uploads/png/2023/02/08/7/b27b31C75U.png)
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/main_sdv"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_centerInParent="true"
fresco:actualImageScaleType="focusCrop"
fresco:placeholderImage="@mipmap/icon_placeholder"
fresco:placeholderImageScaleType="fitCenter"
fresco:progressBarImage="@mipmap/icon_progress_bar"
fresco:progressBarImageScaleType="centerInside"
fresco:progressBarAutoRotateInterval="5000"
></com.facebook.drawee.view.SimpleDraweeView>
</RelativeLayout>- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
代码说明:
![正在加载图 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_xml_11](https://file.cfanz.cn/uploads/png/2023/02/08/7/7b63Gd168b.png)
MainActivity
public class MainActivity extends AppCompatActivity {
private SimpleDraweeView simpleDraweeView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Fresco.initialize(this);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
//创建SimpleDraweeView对象
simpleDraweeView = (SimpleDraweeView) findViewById(R.id.main_sdv);
//创建将要下载的图片的URI
Uri imageUri = Uri.parse("https://img-my.csdn.net/uploads/avatar/4/E/8/1_y1scp.jpg");
//开始下载
simpleDraweeView.setImageURI(imageUri);
}
}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
代码分析:
![正在加载图 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_xml_12](https://file.cfanz.cn/uploads/png/2023/02/08/7/J6Y4a27JPN.png)
运行效果图:
![正在加载图 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_Fresco_13](https://file.cfanz.cn/uploads/gif/2023/02/08/7/52bbB9a500.gif)
正在加载图本身是不可以转的,但是呢,加上了fresco:progressBarAutoRotateInterval="5000" 属性,那么它就可以旋转了;可以看到,正在加载图一闪而过,这是因为我们加载的图片很小,网络也很好。
失败图—failureImage:
icon_failure.png
![icon_failure Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_android_14](https://file.cfanz.cn/uploads/png/2023/02/08/7/152511491e.png)
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/main_sdv"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_centerInParent="true"
fresco:actualImageScaleType="focusCrop"
fresco:placeholderImage="@mipmap/icon_placeholder"
fresco:placeholderImageScaleType="fitCenter"
fresco:progressBarImage="@mipmap/icon_progress_bar"
fresco:progressBarImageScaleType="centerInside"
fresco:progressBarAutoRotateInterval="5000"
fresco:failureImage="@mipmap/icon_failure"
fresco:failureImageScaleType="centerInside"
></com.facebook.drawee.view.SimpleDraweeView>
</RelativeLayout>- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
代码分析:
![失败图代码分析 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_android_15](https://file.cfanz.cn/uploads/png/2023/02/08/7/Y2dJ589V8b.png)
MainActivity
public class MainActivity extends AppCompatActivity {
private SimpleDraweeView simpleDraweeView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Fresco.initialize(this);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
//创建SimpleDraweeView对象
simpleDraweeView = (SimpleDraweeView) findViewById(R.id.main_sdv);
//创建将要下载的图片的URI
Uri imageUri = Uri.parse;
//开始下载
simpleDraweeView.setImageURI(imageUri);
}
}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
代码说明:
![错误的网络图片地址 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_xml_16](https://file.cfanz.cn/uploads/png/2023/02/08/7/aZ5PP3IHZJ.png)
运行效果:
![failure Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_android_17](https://file.cfanz.cn/uploads/gif/2023/02/08/7/5I9578544b.gif)
重试图—retryImage:
icon_retry.png
![icon_retry Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_android_18](https://file.cfanz.cn/uploads/png/2023/02/08/7/QGTVccGXDe.png)
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/main_sdv"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_centerInParent="true"
fresco:actualImageScaleType="focusCrop"
fresco:placeholderImage="@mipmap/icon_placeholder"
fresco:placeholderImageScaleType="fitCenter"
fresco:progressBarImage="@mipmap/icon_progress_bar"
fresco:progressBarImageScaleType="centerInside"
fresco:progressBarAutoRotateInterval="5000"
fresco:failureImage="@mipmap/icon_failure"
fresco:failureImageScaleType="centerInside"
fresco:retryImage="@mipmap/icon_retry"
fresco:retryImageScaleType="centerCrop"
></com.facebook.drawee.view.SimpleDraweeView>
</RelativeLayout>- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
代码分析:
![重试图 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_ico_19](https://file.cfanz.cn/uploads/png/2023/02/08/7/0BGdUYGf4K.png)
MainActivity
public class MainActivity extends AppCompatActivity {
private SimpleDraweeView simpleDraweeView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Fresco.initialize(this);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
//创建SimpleDraweeView对象
simpleDraweeView = (SimpleDraweeView) findViewById(R.id.main_sdv);
//创建将要下载的图片的URI
Uri imageUri = Uri.parse;
//开始下载
simpleDraweeView.setImageURI(imageUri);
//创建DraweeController
DraweeController controller = Fresco.newDraweeControllerBuilder()
//加载的图片URI地址
.setUri(imageUri)
//设置点击重试是否开启
.setTapToRetryEnabled(true)
//设置旧的Controller
.setOldController(simpleDraweeView.getController())
//构建
.build();
//设置DraweeController
simpleDraweeView.setController(controller);
}
}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
代码说明:
![重试图片 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_ico_20](https://file.cfanz.cn/uploads/png/2023/02/08/7/0b7CO62M36.png)
运行效果:
![重试图效果 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_ico_21](https://file.cfanz.cn/uploads/gif/2023/02/08/7/FXNde4BY44.gif)
注意:
failureImage(失败图)
淡入淡出动画—fadeDuration:
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/main_sdv"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_centerInParent="true"
fresco:actualImageScaleType="focusCrop"
fresco:placeholderImage="@mipmap/icon_placeholder"
fresco:placeholderImageScaleType="fitCenter"
fresco:progressBarImage="@mipmap/icon_progress_bar"
fresco:progressBarImageScaleType="centerInside"
fresco:progressBarAutoRotateInterval="5000"
fresco:failureImage="@mipmap/icon_failure"
fresco:failureImageScaleType="centerInside"
fresco:retryImage="@mipmap/icon_retry"
fresco:retryImageScaleType="centerCrop"
fresco:fadeDuration="5000"
></com.facebook.drawee.view.SimpleDraweeView>
</RelativeLayout>- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
代码说明:
![淡入淡出动画 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_Fresco_22](https://file.cfanz.cn/uploads/png/2023/02/08/7/08dJa8062I.png)
MainActivity
运行效果:
重试+进度图+失败图 | 进度图+正确图 |
|
|
背景图—backgroundImage:
这里呢,我们的背景图采用的是一个系统所提供的颜色中的一种。
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/main_sdv"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_centerInParent="true"
fresco:actualImageScaleType="focusCrop"
fresco:fadeDuration="5000"
fresco:backgroundImage="@android:color/holo_orange_light"
></com.facebook.drawee.view.SimpleDraweeView>
</RelativeLayout>- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
代码说明:
![背景图 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_ico_25](https://file.cfanz.cn/uploads/png/2023/02/08/7/EaMaYTN6L7.png)
MainActivity
![背景效果 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_xml_26](https://file.cfanz.cn/uploads/gif/2023/02/08/7/1SCceJ23cH.gif)
叠加图—overlayImage:
这里呢,我们的背景图采用的是一个系统所提供的颜色中的一种。
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/main_sdv"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_centerInParent="true"
fresco:actualImageScaleType="focusCrop"
fresco:placeholderImage="@mipmap/icon_placeholder"
fresco:placeholderImageScaleType="fitCenter"
fresco:progressBarImage="@mipmap/icon_progress_bar"
fresco:progressBarImageScaleType="centerInside"
fresco:progressBarAutoRotateInterval="5000"
fresco:failureImage="@mipmap/icon_failure"
fresco:failureImageScaleType="centerInside"
fresco:retryImage="@mipmap/icon_retry"
fresco:retryImageScaleType="centerCrop"
fresco:fadeDuration="5000"
fresco:backgroundImage="@android:color/holo_orange_light"
fresco:pressedStateOverlayImage="@android:color/holo_green_dark"
fresco:overlayImage="@android:color/black"
></com.facebook.drawee.view.SimpleDraweeView>
</RelativeLayout>- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
代码说明:
![叠加图 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_xml_27](https://file.cfanz.cn/uploads/png/2023/02/08/7/eIe51W3Jfd.png)
MainActivity
运行效果:
![叠加图 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_xml_28](https://file.cfanz.cn/uploads/png/2023/02/08/7/A2R417886L.png)
从运行效果来看,叠加图在最上面,覆盖了下面的图。
圆形图—roundAsCircle:
一行代码搞定圆形图:设置roundAsCircle为true;
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/main_sdv"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_centerInParent="true"
fresco:actualImageScaleType="focusCrop"
fresco:placeholderImage="@mipmap/icon_placeholder"
fresco:placeholderImageScaleType="fitCenter"
fresco:progressBarImage="@mipmap/icon_progress_bar"
fresco:progressBarImageScaleType="centerInside"
fresco:progressBarAutoRotateInterval="5000"
fresco:failureImage="@mipmap/icon_failure"
fresco:failureImageScaleType="centerInside"
fresco:retryImage="@mipmap/icon_retry"
fresco:retryImageScaleType="centerCrop"
fresco:fadeDuration="5000"
fresco:backgroundImage="@android:color/holo_orange_light"
fresco:roundAsCircle="true"
></com.facebook.drawee.view.SimpleDraweeView>
</RelativeLayout>- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
代码说明:
![圆形图 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_android_29](https://file.cfanz.cn/uploads/png/2023/02/08/7/KI53E1MWVH.png)
MainActivity
运行效果:
![circle Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_ico_30](https://file.cfanz.cn/uploads/gif/2023/02/08/7/c11V26KW5V.gif)
可以看到,从图片开始加载一直到图片下载完毕,整个图像都是圆形的。
圆角图—roundedCornerRadius:
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/main_sdv"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_centerInParent="true"
fresco:actualImageScaleType="focusCrop"
fresco:placeholderImage="@mipmap/icon_placeholder"
fresco:placeholderImageScaleType="fitCenter"
fresco:progressBarImage="@mipmap/icon_progress_bar"
fresco:progressBarImageScaleType="centerInside"
fresco:progressBarAutoRotateInterval="5000"
fresco:failureImage="@mipmap/icon_failure"
fresco:failureImageScaleType="centerInside"
fresco:retryImage="@mipmap/icon_retry"
fresco:retryImageScaleType="centerCrop"
fresco:fadeDuration="5000"
fresco:backgroundImage="@android:color/holo_orange_light"
fresco:roundedCornerRadius="30dp"
></com.facebook.drawee.view.SimpleDraweeView>
</RelativeLayout>- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
代码说明:
![圆角 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_ico_31](https://file.cfanz.cn/uploads/png/2023/02/08/7/21A6e2A2bU.png)
MainActivity
运行效果:
![圆角运行图 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_Fresco_32](https://file.cfanz.cn/uploads/gif/2023/02/08/7/9cWQEedV05.gif)
可以看到,从图片开始加载一直到图片下载完毕,整个图像都是圆角的。
圆角属性 | 圆角属性 |
左上角是否为圆角 | 右上角是否为圆角 |
|
|
|
|
左下角是否为圆角 | 右下角是否为圆角 |
注意:
当我们同时设置图像显示为圆形图像和圆角图像时,只会显示为圆形图像。
![同时设置圆形圆角 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_xml_37](https://file.cfanz.cn/uploads/png/2023/02/08/7/8d1C7R3381.png)
圆形圆角边框宽度及颜色—roundingBorder:
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/main_sdv"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_centerInParent="true"
fresco:actualImageScaleType="focusCrop"
fresco:placeholderImage="@mipmap/icon_placeholder"
fresco:placeholderImageScaleType="focusCrop"
fresco:progressBarImage="@mipmap/icon_progress_bar"
fresco:progressBarImageScaleType="focusCrop"
fresco:progressBarAutoRotateInterval="5000"
fresco:failureImage="@mipmap/icon_failure"
fresco:failureImageScaleType="focusCrop"
fresco:retryImage="@mipmap/icon_retry"
fresco:retryImageScaleType="focusCrop"
fresco:fadeDuration="5000"
fresco:backgroundImage="@android:color/holo_orange_light"
fresco:roundAsCircle="true"
fresco:roundedCornerRadius="30dp"
fresco:roundTopLeft="true"
fresco:roundTopRight="true"
fresco:roundBottomLeft="true"
fresco:roundBottomRight="true"
fresco:roundingBorderWidth="10dp"
fresco:roundingBorderColor="@android:color/black"
></com.facebook.drawee.view.SimpleDraweeView>
</RelativeLayout>- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
代码说明:
![圆形圆角边框 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_xml_38](https://file.cfanz.cn/uploads/png/2023/02/08/7/920ZHb28GE.png)
MainActivity
运行效果(左边显示的是带边框的圆形图像,右边显示的是带边框的圆角图像):
![圆形边框 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_xml_39](https://file.cfanz.cn/uploads/gif/2023/02/08/7/3Z1T2aadaO.gif)
![圆角边框 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_xml_40](https://file.cfanz.cn/uploads/gif/2023/02/08/7/60BZO38IYc.gif)
圆形或圆角图像底下的叠加颜色—roundWithOverlayColor:
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/main_sdv"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_centerInParent="true"
fresco:actualImageScaleType="focusCrop"
fresco:placeholderImage="@mipmap/icon_placeholder"
fresco:placeholderImageScaleType="focusCrop"
fresco:progressBarImage="@mipmap/icon_progress_bar"
fresco:progressBarImageScaleType="focusCrop"
fresco:progressBarAutoRotateInterval="5000"
fresco:failureImage="@mipmap/icon_failure"
fresco:failureImageScaleType="focusCrop"
fresco:retryImage="@mipmap/icon_retry"
fresco:retryImageScaleType="focusCrop"
fresco:fadeDuration="5000"
fresco:backgroundImage="@android:color/holo_orange_light"
fresco:roundWithOverlayColor="@android:color/darker_gray"
fresco:roundAsCircle="true"
></com.facebook.drawee.view.SimpleDraweeView>
</RelativeLayout>- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
代码说明:
![底下的颜色 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_ico_41](https://file.cfanz.cn/uploads/png/2023/02/08/7/L7NH6aXL0O.png)
MainActivity
运行效果(左边为圆形效果,右边为圆角效果):
![圆形效果 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_Fresco_42](https://file.cfanz.cn/uploads/gif/2023/02/08/7/Vfe1OUaa39.gif)
![圆角效果 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_Fresco_43](https://file.cfanz.cn/uploads/gif/2023/02/08/7/AEW7347W06.gif)
缩放类型—ScaleType:
类型 | 描述 |
center | 居中,无缩放 |
centerCrop | 保持宽高比缩小或放大,使得两边都大于或等于显示边界。居中显示。 |
focusCrop | 同centerCrop, 但居中点不是中点,而是指定的某个点 |
centerInside | 使两边都在显示边界内,居中显示。如果图尺寸大于显示边界,则保持长宽比缩小图片。 |
fitCenter | 保持宽高比,缩小或者放大,使得图片完全显示在显示边界内。居中显示 |
fitStart | 同上。但不居中,和显示边界左上对齐 |
fitEnd | 同fitCenter, 但不居中,和显示边界右下对齐 |
fitXY | 不保存宽高比,填充满显示边界 |
none | 如要使用tile mode显示, 需要设置为none |
推荐使用:focusCrop 类型
Fresco中文说明对这一点也有详情的说明: 缩放
总结:
XML属性 | 意义 |
fadeDuration | 淡入淡出动画持续时间(单位:毫秒ms) |
actualImageScaleType | 实际图像的缩放类型 |
placeholderImage | 占位图 |
placeholderImageScaleType | 占位图的缩放类型 |
progressBarImage | 进度图 |
progressBarImageScaleType | 进度图的缩放类型 |
progressBarAutoRotateInterval | 进度图自动旋转间隔时间(单位:毫秒ms) |
failureImage | 失败图 |
failureImageScaleType | 失败图的缩放类型 |
retryImage | 重试图 |
retryImageScaleType | 重试图的缩放类型 |
backgroundImage | 背景图 |
overlayImage | 叠加图 |
pressedStateOverlayImage | 按压状态下所显示的叠加图 |
roundAsCircle | 设置为圆形图 |
roundedCornerRadius | 圆角半径 |
roundTopLeft | 左上角是否为圆角 |
roundTopRight | 右上角是否为圆角 |
roundBottomLeft | 左下角是否为圆角 |
roundBottomRight | 右下角是否为圆角 |
roundingBorderWidth | 圆形或者圆角图边框的宽度 |
roundingBorderColor | 圆形或者圆角图边框的颜色 |
roundWithOverlayColor | 圆形或者圆角图底下的叠加颜色(只能设置颜色) |
viewAspectRatio | 控件纵横比 |
![淡入淡出动画 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_ico_23](https://file.cfanz.cn/uploads/gif/2023/02/08/7/KVFa3116b0.gif)
![正确图 Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_android_24](https://file.cfanz.cn/uploads/gif/2023/02/08/7/L6C18346FW.gif)
![Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_xml_33](https://file.cfanz.cn/uploads/gif/2023/02/08/7/1B74W3PdFO.gif)
![Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_ico_34](https://file.cfanz.cn/uploads/gif/2023/02/08/7/QQ050Zd01L.gif)
![Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_Fresco_35](https://file.cfanz.cn/uploads/gif/2023/02/08/7/6106SSU65Q.gif)
![Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]_ico_36](https://file.cfanz.cn/uploads/gif/2023/02/08/7/F69KR209I7.gif)
