android图片加载框架(android课程设计小项目)

android图片加载框架(android课程设计小项目)目前使用在android中的图片加载框架有不少,有ImageLoader、Glide和Picasso,这些框架被用在了很多的项目当中,可是当Glide或者是Picasso去加载几千张的图片时候,依然造成了图片加载卡顿的现象,所以这里就要介绍给大家一个非常优秀的、功能十分强大的,在加载几千张图片依然流畅的图片加载框架Fresco,这个框架的出自Facebook的开发团队,目前在github的star数已经达到了上万。

接下来就来体验一下Fresco的使用

(一)最简单的使用

1)在你的app级别的.gradle文件中添加fresco的依赖

compile’com.facebook.fresco:fresco:1.1.0′

2)创建App类,继承自系统中的Application类,重写onCreate()方法,并在清单文件中配置App类

//最简单的Fresco初始化
Fresco.initialize(this);

Fresco还重载了两个初始化的方法,另外两种初始化在后文中再讲

3)Fresco对于图片加载并不是像其他的图片加载框架一样,直接将图片加载到ImageView中,而是加载到它内置的一个继承自View的DraweeView控件上。然而我们想要使用Fresco中一些强大的功能的话,需要用到的是DraweeView的一个子类SimpleDraweeView。

在布局文件中使用SimpleDraweeView

<com.facebook.drawee.view.SimpleDraweeView
android:id=”@ id/sdv”
android:layout_width=”100dp”
android:layout_height=”100dp” />

需要注意的是在DraweeView的layout_width和layout_height并不支持wrap_content属性,一旦你使用了这个属性,将会导致view的onLayout()方法重新执行,出现画面的跳跃。

4)加载图片

Fresco能够加载以下类型的图片

类型SCHEME示例远程图片http://, https://HttpURLConnection 或者参考 使用其他网络加载方案本地文件file://FileInputStreamContent providercontent://ContentResolverasset目录下的资源asset://AssetManagerres目录下的资源res://Resources.openRawResourceUri中指定图片数据data:mime/type;base64数据类型必须符合 rfc2397规定 (仅支持 UTF-8)

这个案例我们就去加载网络中的图片,我随便在网络上找了一张图片去加载加载网络图片还需要在manifests文件中增加访问网络图片的权限:

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

在activity中进行图片加载操作

SimpleDraweeView sdv = (SimpleDraweeView) findViewById(R.id.sdv);
sdv.setImageURI(“http://pic.58pic.com/58pic/13/77/09/53K58PICEMN_1024.jpg”);

对于加载其他类型的图片,用以下规则String imageUri = “http://site.com/image.png”; // 网络图片String imageUri = “file:///mnt/sdcard/image.png”; //SD卡图片String imageUri = “content://media/external/audio/albumart/13”; // 媒体文件夹String imageUri = “assets:///image.png”; // assetsString imageUri = “res://” context.getPackageName() “/” R.drawable.image; // drawable文件运行app,发现图片成功被加载。

(二)SimpleDraweeView的属性介绍

上面介绍了Fresco最简单的用法,接下来就来说下SimpleDrawwwView的所有属性,这些属性体现了Fresco强大的地方。

对于这些属性的使用就补贴代码了,大家可以自己尝试一下

(三)对于GIF与WEBP的支持

Fresco不仅支持常见的图片格式,还支持GIF和WEBP格式的图片如果你想要你的应用支持gif和webp格式图片,那么需要添加以下依赖:

// 支持 GIF 动图,需要添加
compile ‘com.facebook.fresco:animated-gif:1.1.0’

// 支持 WebP (静态图 动图),需要添加
compile ‘com.facebook.fresco:animated-webp:1.1.0’
compile ‘com.facebook.fresco:webpsupport:1.1.0’

// 仅支持 WebP 静态图,需要添加
compile ‘com.facebook.fresco:webpsupport:1.1.0’(四)切换网络底层

Fresco网络加载库默认是使用的是HttpUrlConnection,但是它支持开发者切换网络加载库。切换网络底层,讲到切换网络底层就要回到Fresco的初始化的重载方法,这里使用两个参数的初始化方法。

Fresco.initialize(Context context,@Nullable ImagePipelineConfig imagePipelineConfig);

这里可以看到需要一个ImagePipelineConfig对象,Fresco将图片加载的工作交给ImagePipelineConfig类去做,所以对图片加载的配置都是通过这个类来完成的。ImagePipelineConfig的对象不能直接new,而是通过其内部提供的Builder类的build()方法来构造出对象。所以切换底层,用以下这个类就能完成。在这里,我将网络底层切换为okhttp。查看文档,发现切换网络底层需要我们去自定义类继承NetworkFetchProducer类去完成,不过Fresco非常人性化的为我们提供依赖,可以快速的将网络底层切换为okhttp。

在app的.gradle依赖:

//网络加载切换为okhttp2
compile “com.facebook.fresco:imagepipeline-okhttp:1.1.0″//网络加载切换为okhttp3compile “com.facebook.fresco:imagepipeline-okhttp3:0.1.1.0”

重写onCreate()方法

ImagePipelineConfig frescoConfig = OkHttpImagePipelineConfigFactory.newBuilder(this,okHttpClient).build();
Fresco.initialize(this,frescoConfig);

参考文献:Fresco官方使用文档https://www.fresco-cn.org/docs/index.html

看完本文有收获?请转发分享给更多人

发表评论

登录后才能评论