对于安装大小的优化,占用最多的就是图片资源。把图片资源文件替换webp格式可以大大减少包的体积。
webp是一种图片文件格式,webp默认只支持Android4.0以上。但是ImageView加载不了动态的webp,我们可以使用facebook 的 fresco加载动态的webp.
引入fresco依赖库
api 'com.facebook.fresco:fresco:1.13.0'
// 支持 WebP (静态图+动图),需要添加
api 'com.facebook.fresco:animated-webp:1.13.0'
api 'com.facebook.fresco:webpsupport:1.13.0'
//初始化
Fresco.initialize(getApplication().getApplicationContext());
/**
* Fresco 加载本地webp图片
* @param draweeView
* @param resId
*/
public static void loadDrawable(SimpleDraweeView draweeView, @DrawableRes int resId) {
Uri uri = Uri.parse(imageTranslateUri(draweeView.getContext(), resId));
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setUri(uri)
.setAutoPlayAnimations(true)
.setOldController(draweeView.getController())
.build();
draweeView.setController(controller);
}
/**
* Fresco 加载webp图片
* @param draweeView
* @param imageUrl
*/
public static void loadWebpImage(SimpleDraweeView draweeView, String imageUrl) {
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setUri(imageUrl)
.setAutoPlayAnimations(true)
.setOldController(draweeView.getController())
.build();
draweeView.setController(controller);
}
/**
* drawable路径转换成 url
* @param context
* @param resId
* @return
*/
public static StringimageTranslateUri(Context context, int resId) {
Resources r = context.getResources();
Uri uri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE +"://" + r.getResourcePackageName(resId) +"/" + r.getResourceTypeName(resId) +"/" + r.getResourceEntryName(resId));
return uri.toString();
}
网友评论