Android图片处理框架之Fresco学习使用
来源:互联网 发布:淘宝开店运营流程图 编辑:程序博客网 时间:2024/06/05 17:07
一、概述
1、介绍
Fresco是Facebook最新推出的一款用于Android应用中展示图片的强大图片库,可以从网络、本地存储和本地资源中加载图片。相对于ImageLoader,拥有更快的图片下载速度以及可以加载和显示gif图等诸多优势,是个很好的图片框架。并且比Glide和Picasso功能都强大。
2、Image Pipeline
Image Pipeline 的模块。它负责从网络,从本地文件系统,本地资源加载图片。为了最大限度节省空间和CPU时间,它含有3级缓存设计(2级内存,1级磁盘)。
3、Drawees
Drawees 负责在图片加载完成前显示占位图,加载成功后自动替换为目标图片。当图片不再显示在屏幕上时,它会及时地释放内存和空间占用。
4、特点
1)内存管理
内存分配采用:系统匿名共享内存
在5.0以下系统,Fresco将图片放到一个特别的内存区域。当然,在图片不显示的时候,占用的内存会自动被释放。这会使得APP更加流畅,减少因图片内存占用而引发的OOM。
2)渐进式呈现图片
渐进式图片格式先呈现大致的图片轮廓,然后随着图片下载的继续, 呈现逐渐清晰的图片,这对于移动设备,尤其是慢网络有极大的利好,可带来更好的用户体验。
3)支持加载Gif图,支持WebP格式。
4)图像的呈现
- 自定义居中焦点(对人脸等图片显示非常有帮助)。
- 圆角图,当然圆圈也行。
- 下载失败之后,点击重新下载。
- 自定义占位图,自定义overlay, 或者进度条。
- 指定用户按压时的overlay。
5)图像的加载
- 为同一个图片指定不同的远程路径,或者使用已经存在本地缓存中的图片。
- 先显示一个低解析度的图片,等高清图下载完之后再显示高清图。
- 加载完成回调通知。
- 对于本地图,如有EXIF缩略图,在大图加载完成之前,可先显示缩略图。
- 缩放或者旋转图片。
- 处理已下载的图片。
5、官方参考
GitHub地址:https://github.com/facebook/fresco
使用文档地址:https://www.fresco-cn.org/docs/index.html
二、Demo
1、效果说明
本demo使用Fresco完成以下功能:
1) 基本使用
Uri uri = Uri.parse("http://pic.qiantucdn.com/58pic/22/76/26/57d0ef9f30729_1024.jpg"); /* Drawees 负责图片的呈现 */ SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view); draweeView.setImageURI(uri);
2)带进度条的图片
SimpleDraweeView sdvFrescoSpimg = (SimpleDraweeView) findViewById(R.id.sdv_fresco_spimg);// 设置样式GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(getResources());GenericDraweeHierarchy hierarchy = builder.setProgressBarImage(new ProgressBarDrawable()).build(); sdvFrescoSpimg.setHierarchy(hierarchy);// 加载图片的地址Uri uri = Uri.parse("http://pic.qiantucdn.com/58pic/18/74/91/5652b24db9faf_1024.jpg");// 加载图片 sdvFrescoSpimg.setImageURI(uri);
3)图片的不同裁剪
// 设置描述tvFrescoExplain.setText("居中,无缩放"); // 样式设置GenericDraweeHierarchy hierarchy = builder.setActualImageScaleType(ScalingUtils.ScaleType.CENTER).build(); // 图片显示imageDisplay(hierarchy);
4)圆形和圆角图片
/** * 设置圆形图片 */ public void fresco_circle(View view) { // 设置圆形图片 parames = RoundingParams.asCircle(); GenericDraweeHierarchy hierarchy = builder.setRoundingParams(parames).build(); simpleDraweeView.setHierarchy(hierarchy); simpleDraweeView.setImageURI(uri); } /** * 设置圆角图片 */ public void fresco_corner(View view) {parames = RoundingParams.fromCornersRadius(50f); parames.setOverlayColor(getResources().getColor(android.R.color.holo_red_light));//覆盖层 parames.setBorder(getResources().getColor(android.R.color.holo_blue_light), 5);//边框 GenericDraweeHierarchy hierarchy = builder.setRoundingParams(parames).build();simpleDraweeView.setHierarchy(hierarchy); // 加载图片 simpleDraweeView.setImageURI(uri); }
5)渐进式展示图片
// 获取图片请求ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri).setProgressiveRenderingEnabled(true).build(); DraweeController draweeController =Fresco .newDraweeControllerBuilder().setImageRequest(request).setTapToRetryEnabled(true) .setOldController(sdvFrescoJpeg.getController())//使用oldController可以节省不必要的内存分配.build();// 设置加载的控制sdvFrescoJpeg.setController(draweeController);
6) GIF动画图片
DraweeController controller = Fresco.newDraweeControllerBuilder() .setUri(uri) .setAutoPlayAnimations(false) .setOldController(sdvFrescoGif.getController()) .build(); sdvFrescoGif.setController(controller); /** * 停止动画 */ public void stopAnim(View view) { Animatable animatable = sdvFrescoGif.getController().getAnimatable(); if (animatable != null && animatable.isRunning()) { animatable.stop(); } } /** * 开始动画 */ public void startAnim(View view) { Animatable animatable = sdvFrescoGif.getController().getAnimatable(); if (animatable != null && !animatable.isRunning()) { animatable.start(); }
7)多图请求及图片复用
8)图片缩放和旋转
9)修改图片
10)动态展示图片
2、demo地址:
https://github.com/TDCQZD/FrescoTest
三、如何使用?
1、依赖库
//fresco依赖库 compile 'com.facebook.fresco:fresco:0.12.0' // 在 API < 14 上的机器支持 WebP 时,需要添加 compile 'com.facebook.fresco:animated-base-support:0.12.0' // 支持 GIF 动图,需要添加 compile 'com.facebook.fresco:animated-gif:0.12.0' // 支持 WebP (静态图+动图),需要添加 compile 'com.facebook.fresco:animated-webp:0.12.0' compile 'com.facebook.fresco:webpsupport:0.12.0' // 仅支持 WebP 静态图,需要添加 compile 'com.facebook.fresco:webpsupport:0.12.0'
2、在全局变量Application初始化Fresco
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); }
配置AndroidManifest.xml
需要在 AndroidManifest.xml 中指定 Application 类,添加权限。
<uses-permission android:name="android.permission.INTERNET" /> <application android:name=".MyApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".activity.FrescoActivity" /> <activity android:name=".activity.FrescoAutoSizeActivity" /> <activity android:name=".activity.FrescoCircleAndCornerActivity" /> <activity android:name=".activity.FrescoCropActivity" /> <activity android:name=".activity.FrescoSpimgActivity" /> <activity android:name=".activity.FrescoResizeActivity" /> <activity android:name=".activity.FrescoMultiActivity" /> <activity android:name=".activity.FrescoModifyActivity" /> <activity android:name=".activity.FrescoListenerActivity" /> <activity android:name=".activity.FrescoJpegActivity" /> <activity android:name=".activity.FrescoGifAcitivity" /> </application>
3、使用Drawees显示图片
/*
Drawees 负责图片的呈现
*/
SimpleDraweeView draweeView =
(SimpleDraweeView) findViewById(R.id.my_image_view);
draweeView.setImageURI(uri);
四、源码解析
推荐博客:
http://blog.csdn.net/column/details/master-fresco.html
结束语:
首先感谢尚硅谷无偿提供的学习资料。写博客是为了帮助开发者学习使用技术,同时巩固自己所学技术。如果此篇博客有助于您的学习,那是我的荣幸!如果此篇博客有任何瑕疵,请多多指教!在此感谢您的学习和指教!
- Android图片处理框架之Fresco学习使用
- Android中使用开源框架Fresco处理图片
- ANDROID中使用开源框架FRESCO处理图片
- Android之图片加载框架Fresco基本使用(一)
- android之图片加载框架fresco
- android图片请求框架Fresco的使用
- Android图片处理之Fresco初实践
- Android图片处理框架之Glide学习使用
- Android图片处理框架之Picasso学习使用
- Android学习之图片加载库Fresco
- 【Android - 框架】之Fresco的使用
- 图片加载框架之Fresco
- 图片加载框架之Fresco
- 图片加载框架之Fresco
- Fresco图片加载框架使用
- 使用Fresco框架加载图片
- Fresco图片框架的使用
- Android四大图片缓存框架之-Fresco(一)
- Python-yield模拟生产消费者模型
- deep learning pretrained model
- 核密度估计与自适应带宽的核密度估计
- $(document).ready()笔记
- [乱搞]斐波那契数列与gcd之间一个有趣的定理
- Android图片处理框架之Fresco学习使用
- java filter过滤器的配置
- 面向对象和面向过程的区别
- MXNet的训练入口:fit.py源码详解
- Android 动画总结
- c++ 学习 内存四区
- PAT--1050. String Subtraction
- Spring Cloud构建微服务架构(七)消息总线
- 文章标题