Android使用开源框架Fresco处理图片

关于Fresco的优点大家自行谷歌吧,它太强大太优秀了,我这一片小博文容纳不下啊羡慕,今天主要给大家简单介绍下Fresco的使用以及一些属性的介绍。

Fresco是一个强大的图片加载组件。使用它之后,你不需要再去关心图片的加载和显示这些繁琐的事情!支持Android2.3及以后的版本。

官网详细介绍了Fresco一些特性,我第一次看确实是惊呆了。https://www.fresco-cn.org/

2016年Fresco的最新的源码分析:https://github.com/desmond1121/Fresco-Source-Analysis

简述与其他常用图片缓存框架的比较

(1)Volley提供了一个新的控件NetworkImageView来代替传统的ImageView如果你的工程项目,是一个比较小的项目,或者要求不是很高的项目,处理比较简单的可以使用这个库,这个库是Google 2013 I/O发布的一个开源库。使用这个库在图片的处理上,没有提供任何的图片处理的操作,用于细粒度的数据连接还是可以的。

(2)Universal-Image-Loader是比较早的一个图片缓存组件,也一直受到开发者的推崇,在很多老的应用中使用。

(3)Picasso与Glide,无疑Glide胜出

(4)而Fresco作为新秀,不管从内存管理(三级缓存),图片的渐进式呈现,Gif图和Webp格式图像的加载,都是非常突出。(也是我最喜欢用的)

涉及的常用基本属性介绍

(1)layout_width和layout_height不支持warp_Content但是可以通过setAspectRetio();来设置宽高比

(2)fadeDuration()淡出时间;

(3)actualImageScaleType 设置图片缩放,通常使用foucsCrop,该属性值会通过算法把人头像放在中间

(4)placeholderImage下载成功之前显示的图片placeholderImageScaleType

(5)failureImage加载失败时显示的图片faiturelmagescateType

(6)retrylmage加载失败,提示用户点击重新加载的图片retrylmagescateType

(7)progressBarImage提示用户正在加载,和进度无关progressBarlmagescateType

(8)progressBarAutoRotateInterval图片自动旋转的时间间隔

(9)backgroundImage背景

(10)overlayImage叠加图

(11)pressedStateOverlayImage按下时候的叠加图

(12)roundAsCircle是否涉及圆圈

(13)roundedCornerRadius圆角

(14)roundTopLeft、roundTopRight…..分别设置4个角不同半径,设置为true以后可以在代码中通过RoundingParams的setConnersRadii()方法设置角度。

(15)roundWithOverlayColor边框的叠加颜色

(16)roundingBorderWidth边框宽度

(17)roundingBorderColor边框颜色

下面我们简单演示使用Fresco加载网络图片的流程:
演示效果如下(你们猜对了,又是本人的玉照安静):

第一步:导依赖包

与之前的android-image-indicator-master项目相同,本次依然使用AndroidStudio2.2。仍然采用在build.gradle下中dependencies下直接添加如下代码:

compile 'com.facebook.fresco:fresco:0.12.0'

同时可以根据个人项目需求添加如下依赖:

dependencies { // 在 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' }

第二步:添加网络权限

因为是加载网络图片所以必须在 AndroidManifest.xml配置文件中添加网络权限:

<uses-permission android:name="android.permission.INTERNET"/>

第三步:初始化Fresco类

在加载图片之前,你必须初始化Fresco类。你只需要调用Fresco.initialize一次即可完成初始化,下面分别介绍在MainActivity与Application中调用初始化方法

(1)在Application调用初始化(建议使用)

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

做完上面的工作后,需要在 AndroidManifest.xml 中指定 Application 类。

(2)在MainActivity中调用初始化

需要注意的是要在setContentView之前初始化

package com.mly.panhouye.frescodemo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import com.facebook.drawee.backends.pipeline.Fresco; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Fresco.initialize(this);//需要在setContentView之前初始化 setContentView(R.layout.activity_main); } }

第四步:layout中的xml布局文件

在布局之前需要在xml文件中加入命名空间

xmlns:fresco="http://schemas.android.com/apk/res-auto"

具体布局文件如下,本次演示通过按钮点击出发图片加载,使用SimpleDraweeView(注意:layout_width/height不支持wrap_content):

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:fresco="http://schemas.android.com/apk/res-auto" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.mly.panhouye.frescodemo.MainActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/my_image_view" android:layout_centerHorizontal="true" android:text="加载网络图片" android:onClick="loadInternetImage" android:layout_marginTop="12dp" android:id="@+id/button" /> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/my_image_view" android:layout_width="400dp" android:layout_height="400dp" fresco:placeholderImage="@mipmap/ic_launcher" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" /> </RelativeLayout>

第五步:java实现代码

package com.mly.panhouye.frescodemo; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.view.SimpleDraweeView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Fresco.initialize(this);//需要在setContentView之前初始化 setContentView(R.layout.activity_main); } //点击事件加载网络图片代码 public void loadInternetImage(View view){ Uri uri = Uri.parse("http://r.photo.store.qq.com/psb?/V12kkHqD1CWRD4/MeykWt0NXu0stiBFzf378D7ajKSDet6k1.Vaqmq2vps!/r/dKMAAAAAAAAA"); SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view); draweeView.setImageURI(uri); } }

剩下的,Fresco会替你完成,比如:显示占位图直到加载完成;下载图片;缓存图片;图片不再显示时,从内存中移除等等等等。

本文仅仅介绍了Fresco最基本的使用方法,大家伙可以访问官网来尝试其他功能实现。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

时间: 2024-07-28 15:31:50

Android使用开源框架Fresco处理图片的相关文章

asynchttpclient-关于Android的开源框架AsyncHttpClient的问题

问题描述 关于Android的开源框架AsyncHttpClient的问题 代码如下: client.post(url, params, new AsyncHttpResponseHandler(){ @Override public void onSuccess(String content) { // TODO Auto-generated method stub super.onSuccess(content); //System.out.println(content); Log.e(c

Android Annotations开源框架简介

AndroidAnnotations是一个开源框架,旨在加快Android开发的效率.通过使用它开放出来的注解api,你几乎可以使用在任何地方, 大大的减少了无关痛痒的代码量,让开发者能够抽身其外,有足够的时间精力关注在真正的业务逻辑上面.而且通过简洁你的代码,也提高了代码的稳定性和后期的维护成本.以下AndroidAnnotations简称为AA 可能会有人提出异议了,我们移动设备的性能,不比后台服务器拥有充足的内存和运算能力.当大量的使用注解的时候,会不会对APP的造成什么不良的影响,会不会

Android使用开源框架ANDROID-IMAGE-INDICATOR实现图片轮播部署

之前的博文中有介绍关于图片轮播的实现方式,分别为(含超链接): 1.<Android中使用ViewFlipper实现屏幕切换> 2.<Android中使用ViewPager实现屏幕页面切换和页面轮播效果> 3.<Android中使用ImageViewSwitcher实现图片切换轮播导航效果> 今天通过使用GitHub中的开源项目android-image-indicator来简单实现APP自带图片的轮播以及加载网络图片进行轮播. 一.从GitHub上下载项目 GitHu

Android引用开源框架通过AsyncHttpClient实现文件上传

引用开源框架通过AsyncHttpClient进行文件上传,具体内容如下 一.步骤: 1.添加权限(访问网络权限和读写权限) 2.获取上传文件路径并判断是否为空 3.若不为空,创建异步请求对象 4.创建上传文件路径 5.执行post请求(指定url路径,封装上传参数,新建AsyncHttpResponseHandler方法) 二.查看参考文档 三.实例项目解析 运行效果如下: 在本地文件夹中查看是否获取到图片,如下图显示 重点代码:均有详细解析,请认真查看注释 1.在AndroidManifes

2017 Android GitHub常用开源框架汇总

本文讲的是2017 Android GitHub常用开源框架汇总,现在 GitHub 上流行的开源库极大地节省了开发者从 0 开发的时间,很多公司和个人都在 GitHub 上开源自己的项目,今天我们就来整理一下 Android 开发中一些非常流行的库,也是我们必须掌握的,这样可以使我们在使用到时快速的查找到,这里的总结基本也都是自己在开发中用到的,也就是一些个人的见解,只做参考,不具有权威性 一.网络库 1. Retrofit Retrofit 是 Square 公司研发的网络请求库,也是目前

android值得珍藏的6个开源框架技术

1.volley  项目地址 https://github.com/smanikandan14/Volley-demo JSON,图像等的异步下载: 网络请求的排序(scheduling) 网络请求的优先级处理 缓存 多级别取消请求 和Activity和生命周期的联动(Activity结束时同时取消所有网络请求) 2.android-async-http 项目地址:https://github.com/loopj/android-async-http,文档介绍:http://loopj.com/

几款值得推荐的android(安卓)开源框架简介

技术不再多,知道一些常用的.不错的就够了. 该文章自有需要的时候,mark一下. 顺序不代表排名,根据自己需求进行选择即可. 1.volley 项目地址 https://github.com/smanikandan14/Volley-demo  (1)  JSON,图像等的异步下载:  (2)  网络请求的排序(scheduling)  (3)  网络请求的优先级处理  (4)  缓存  (5)  多级别取消请求  (6)  和Activity和生命周期的联动(Activity结束时同时取消所有

Android开源框架ViewPageIndicator和ViewPager实现Tab导航

前言:     关于使用ViewPageIndicator和ViewPager实现Tab导航,在开发社区里已经有一堆的博客对其进行了介绍,如果我还在这里写如何去实现,那简直就是老生常谈,毫无新鲜感,而且,我也不认为自己对ViewPageIndicator的理解会比别人好,毕竟我也是看着大神的帖子,在学习实践着.     那我还写这个有啥意义呢?其实么,就是想在这里记录下,在使用ViewPageIndicator和ViewPager实现Tab导航时,大家有可能会遇到的坑.这个坑,需要我们开发时尽量

Android 开源框架ImageLoader的完美例子

转载:http://blog.csdn.net/wwj_748/article/details/10079311 很多人都在讨论如何让图片能在异步加载更加流畅,可以显示大量图片,在拖动ListView的时候不会出现卡的现象.关于ImageLoader这个开源框架的使用有很多网友都介绍过,不过还不够清楚,这里有一个关于这个开源项目的完美例子,ListView的图片加载.GridView的图片加载.ViewPager的图片加载.Gallery画廊的图片加载.Widget的使用.很完善的一个例子,在这