View

android加载动态webp图片

2019-12-10  本文已影响0人  xiaotimel

对于安装大小的优化,占用最多的就是图片资源。把图片资源文件替换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();

}
上一篇 下一篇

猜你喜欢

热点阅读