android Fresco使用
- Fresco
优点:
1,使用简便,学习成本低
2,十分强大,使用起来非常流畅,内存管理不用愁,不用担心OOM。
3,自带加载时淡入效果,开发起来不费劲.
4,图片加载时可在布局中直接设置加载动画等等,代码量大大减少
缺点:
1,必须使用fresco自定义的控件,如果需求更换,想要更换其他图片加载框架会有一定的麻烦,比如必须要改布局
2,方法数太多,多达近4k方法,对于比较大的项目来说简直是压死骆驼的最后一个稻草,整项目方法数超过65k,不 得不分包.而且打包之后整个项目整整多了3M.确实大得很.
3,必须全套使用fresco的图片加载,否则连获取简简单单的一个缓存中的bitmap都异常费劲
总结:
如果自己的项目不是社交软件,涉及到特别多图片加载的话,还是慎用吧.
当然,在我的印象中,fresco就是你项目中图片加载处理的专业管家,几乎一切繁杂的事情它都帮你处理妥当,用起来简直贴心.
简单使用:
//布局
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/fresco_test"
android:layout_gravity="center"
android:gravity="center"
android:layout_width="60dp"
android:layout_height="60dp"
fresco:fadeDuration="400" //淡入时长
fresco:progressBarImage="@anim/progress_round" //图片加载时显示的动画
fresco:failureImage="@drawable/download_error" //下载失败时的图片
fresco:failureImageScaleType="fitXY"
android:scaleType="fitXY"
/>
//代码中
Uri uri = Uri.parse(urlStr);
fresco_test.setImageURI(uri);//之后的一切全交给fresco就行了
在网上查了好久的资料才在github问答中找到的,简直心酸
神奇蛋疼的获取Bitmap代码:
private Bitmap getBitmapFromCache(String url) {
Uri uri = Uri.parse(url);
ImagePipeline imagePipeline = Fresco.getImagePipeline();
ImageRequest imageRequest = ImageRequest.fromUri(uri);
DataSource<CloseableReference<CloseableImage>> dataSource =
imagePipeline.fetchImageFromBitmapCache(imageRequest, CallerThreadExecutor.getInstance());
try {
CloseableReference<CloseableImage> imageReference = dataSource.getResult();
if (imageReference != null) {
try {
CloseableBitmap image = (CloseableBitmap) imageReference.get();
// do something with the image
Bitmap loadedImage = image.getUnderlyingBitmap();
if (loadedImage != null) {
return loadedImage;
} else {
return null;
}
} finally {
CloseableReference.closeSafely(imageReference);
}
}
} finally {
dataSource.close();
}
return null;
}
facebook非常贴心,居然还有中文的官方文档:
fresco官方文档
摘录:http://www.jianshu.com/p/ec4961133192