PS:最近看到很多人都开始写年终总结了,时间过得飞快,又到年底了,又老了一岁。
学习内容:
1.进度条
2.缩放
3.ControllerBuilder,ControllerListener,PostProcesser,Image Request
4.渐进式JPEG与动图的显示
最近这两天把Fresco的官方文档算是看了个差不多,就剩下Fresco的基本原理还有结合okHttp等类库如何使用的问题,虽然官方文档给出的功能比较的多,比如说自定义View,缩略图显示等等,这些我也基本就看了个大概,觉得实际需求应该没有那么高的要求,因此有些东西我这里就不介绍了,详细的情况可以参考官方文档,我这里只是针对一些使用情况比较多的功能进行一个简单的介绍。
1.进度条
进度条也算是Fresco的一个功能,Fresco内部本身提供了一个ProgressBarDrawable类,效果其实就是一个矩形的蓝色进度条,当图片处于加载状态时,进度条会跟着进行加载,当图片加载完毕之后,那么进度条也随之消失,但是这个进度并不是实时更新的,如果我们想要精确的加载进度,那么我们需要重写内部的方法。
class CustomProgressBar extends Drawable{
@Override
protected boolean onLevelChange(int level) {
//doSomething
return super.onLevelChange(level);
}
}
自定义进度条我们就需要实现onLevelChange方法,这里只做一个简单的介绍,如果大家想自定义进度条,那么可以参照ProgressBarDrawable去重写一个进度条,个人感觉这个功能一般般,与其在加载图片的时候使用进度条,不如使用ProgressBarImage属性为图片加载时设置一个进度图片,同时还支持旋转属性。
2.缩放
DraweeView的缩放和ImageView的缩放类型基本上是相同的,fitXY,centerCrop,唯一与ImageView有区别的就是,他不支持matrix属性,但是追加了一个focusCrop属性来替代matrix属性,这里在设置属性的时候,xml使用fresco:actualScaleType来设置DraweeView的缩放属性或者是使用GenericDraweeHierarchy属性去设置。
GenericDraweeHierarchyBuilder progressHierarchyBuilder = new GenericDraweeHierarchyBuilder(getResources());
GenericDraweeHierarchy progressHierarchy = progressHierarchyBuilder
.setProgressBarImage(new ProgressBarDrawable(), ScalingUtils.ScaleType.CENTER_INSIDE)
.build();
progressImageDraweeView.setHierarchy(progressHierarchy);
这里不要使用setScaleType()或者是在xml中android:scaleType设置缩放属性,这是无效的。官方给出focusCrop去替代matrix是有一定道理的,虽然说效果会比matrix要好,不过到底效果如何这个确实无法评判。先说说这个属性的具体作用。
我们在实际需求中可能会遇到这样的情况,在显示人脸图片的时候,尽量的将图片居中显示,以前我也遇到过这个需求,不过当时是用matrix属性实现的,服务器会传递给我们人脸的重心坐标位置,然后客户端需要根据人脸重心位置将图像进行平移,同时需要将图片进行缩放,是用matrix的话就需要使用matrix.postScale()和matrix.postTranslate()两个方法去实现。简单贴一下当时的处理方式。
@Override
public void onLoadingComplete(String s, View view, Bitmap bitmap) {
float bitmapWidth = bitmap.getWidth();
float bitmapHeight = bitmap.getHeight();
Scale[o] = (params[o].height / bitmapHeight >= params[o].width / bitmapWidth) ? params[o].height / bitmapHeight : params[o].width / bitmapWidth;
float scaleBitmapWidth = Scale[o] * bitmapWidth;