Fresco加载app内的图片,包括gif动图
2016-07-29 11:34
417 查看
[我的项目地址:请点击这里](https://github.com/1181631922/FrescoPicLoad)
原来用项目imageloader,但是现在这个项目图片比较多,而且是列表形式的加载,原来只是简单研究过fresco,感觉用这个应该可以解决大部分问题,先简单了解一下,加载app内的图片首先框架需要初始化,最好放在Application中,而且官方也是这样建议的
这里博主进行了一些简单的封装,还有就是水平有限,如果大家有更好的可以留言或者在github上提交issue
github地址点击打开链接
这里有坑,就是fresco需要知道图片的宽高比例,不支持高度的wrap_content
我封装的方法中用了重载,那个方法合适用哪个,先看一下非gif
activity:
因为xml中没进行定义高度,所以需要进行指定比例,gif的activity和xml差不多,相信大家知道怎么用了
来看util,
注释写的比较详细,大家应该很容易懂,来张效果图
原来用项目imageloader,但是现在这个项目图片比较多,而且是列表形式的加载,原来只是简单研究过fresco,感觉用这个应该可以解决大部分问题,先简单了解一下,加载app内的图片首先框架需要初始化,最好放在Application中,而且官方也是这样建议的
package com.fanyafeng.frescopicload.app; import android.app.Application; import com.facebook.drawee.backends.pipeline.Fresco; import com.fanyafeng.frescopicload.util.frscoutil.FrescoConfig; /** * Author: fanyafeng * Data: 16/7/9 11:14 * Email: fanyafeng@live.cn */ public class AppConfig extends Application { @Override public void onCreate() { super.onCreate(); Fresco.initialize(this, FrescoConfig.getsImagePipelineConfig(this)); } }
这里博主进行了一些简单的封装,还有就是水平有限,如果大家有更好的可以留言或者在github上提交issue
github地址点击打开链接
这里有坑,就是fresco需要知道图片的宽高比例,不支持高度的wrap_content
我封装的方法中用了重载,那个方法合适用哪个,先看一下非gif
activity:
package com.fanyafeng.frescopicload.activity; import android.os.Bundle; import com.facebook.drawee.view.SimpleDraweeView; import com.fanyafeng.frescopicload.R; import com.fanyafeng.frescopicload.BaseActivity; import com.fanyafeng.frescopicload.util.FrescoUtil; //需要搭配baseactivity,这里默认为baseactivity,并且默认Baseactivity为包名的根目录 public class AppPicLoadActivity extends BaseActivity { private SimpleDraweeView sdv1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_app_pic_load); //这里默认使用的是toolbar的左上角标题,如果需要使用的标题为中心的采用下方注释的代码,将此注释掉即可 title = getString(R.string.title_activity_app_pic_load); initView(); initData(); } @Override protected void onResume() { super.onResume(); //toolbar_center_title.setText(getString(R.string.title_activity_app_pic_load)); } //初始化UI空间 private void initView() { sdv1 = (SimpleDraweeView) findViewById(R.id.sdv1); FrescoUtil.loadPicInApp(sdv1, R.drawable.jinmu, 1.77864583f); // ControllerListenerUtil.setControllerListener(sdv1, String.valueOf(R.drawable.jinmu), MyUtils.getScreenWidth(this), this); } //初始化数据 private void initData() { } }xml
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.fanyafeng.frescopicload.activity.AppPicLoadActivity" tools:showIn="@layout/activity_app_pic_load"> <!--需要v4或者v7包,不过一般as创建的工程都默认存在,此处采用滑动嵌套布局,为了解决滑动冲突--> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/sdv1" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> </android.support.v4.widget.NestedScrollView>
因为xml中没进行定义高度,所以需要进行指定比例,gif的activity和xml差不多,相信大家知道怎么用了
来看util,
package com.fanyafeng.frescopicload.util; import android.content.Context; import android.net.Uri; import android.support.annotation.NonNull; import com.facebook.common.util.UriUtil; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.generic.GenericDraweeHierarchy; import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder; import com.facebook.drawee.generic.RoundingParams; import com.facebook.drawee.interfaces.DraweeController; import com.facebook.drawee.view.SimpleDraweeView; /** * Author: fanyafeng * Data: 16/7/9 12:04 * Email: fanyafeng@live.cn */ public class FrescoUtil { /** * 加载app内非动图 * * @param simpleDraweeView view控件 * @param resId 资源比例 * @param aspectRatio 图片长宽比例 */ public static void loadPicInApp(@NonNull SimpleDraweeView simpleDraweeView, @NonNull int resId, float aspectRatio) { if (simpleDraweeView == null) return; Uri uri = new Uri.Builder() .scheme(UriUtil.LOCAL_RESOURCE_SCHEME) .path(String.valueOf(resId)) .build(); if (aspectRatio > 0) { simpleDraweeView.setAspectRatio(aspectRatio); } simpleDraweeView.setImageURI(uri); } /** * 加载app内非动图 * * @param simpleDraweeView * @param resId */ public static void loadPicInApp(@NonNull SimpleDraweeView simpleDraweeView, @NonNull int resId) { if (simpleDraweeView == null) return; Uri uri = new Uri.Builder() .scheme(UriUtil.LOCAL_RESOURCE_SCHEME) .path(String.valueOf(resId)) .build(); simpleDraweeView.setImageURI(uri); } /** * @param simpleDraweeView * @param resId * @param aspectRatio */ public static void loadGifPicInApp(@NonNull SimpleDraweeView simpleDraweeView, @NonNull int resId, float aspectRatio) { if (simpleDraweeView == null) { return; } Uri uri = new Uri.Builder() .scheme(UriUtil.LOCAL_RESOURCE_SCHEME) .path(String.valueOf(resId)) .build(); DraweeController draweeController = Fresco.newDraweeControllerBuilder() .setUri(uri) .setAutoPlayAnimations(true) .build(); if (aspectRatio > 0) { simpleDraweeView.setAspectRatio(aspectRatio); } simpleDraweeView.setController(draweeController); } /** * @param simpleDraweeView * @param resId */ public static void loadGifPicInApp(@NonNull SimpleDraweeView simpleDraweeView, @NonNull int resId) { if (simpleDraweeView == null) { return; } Uri uri = new Uri.Builder() .scheme(UriUtil.LOCAL_RESOURCE_SCHEME) .path(String.valueOf(resId)) .build(); DraweeController draweeController = Fresco.newDraweeControllerBuilder() .setUri(uri) .setAutoPlayAnimations(true) .build(); simpleDraweeView.setController(draweeController); } /** * @param simpleDraweeView * @param gifUrl * @param aspectRatio */ public static void loadGifPicOnNet(SimpleDraweeView simpleDraweeView, @NonNull String gifUrl, float aspectRatio) { DraweeController draweeController = Fresco.newDraweeControllerBuilder() .setUri(Uri.parse(gifUrl)) .setAutoPlayAnimations(true) .build(); if (aspectRatio > 0) { simpleDraweeView.setAspectRatio(aspectRatio); } simpleDraweeView.setController(draweeController); } /** * @param simpleDraweeView * @param gifUrl */ public static void loadGifPicOnNet(SimpleDraweeView simpleDraweeView, @NonNull String gifUrl) { DraweeController draweeController = Fresco.newDraweeControllerBuilder() .setUri(Uri.parse(gifUrl)) .setAutoPlayAnimations(true) .build(); simpleDraweeView.setController(draweeController); } }
注释写的比较详细,大家应该很容易懂,来张效果图
相关文章推荐
- fresco(最牛逼的图片缓存加载框架),包括xutil的使用
- Fresco图片加载框架Demo,简单展示静态图片,gif动图
- 2012-02-13 23:42 提高iPhone app里图片加载速度的方法
- 【OSC手机App技术解析】- 列表异步线程加载图片
- 一、Android 图片加载框架 Fresco 入门
- FaceBook推出的Android图片加载库-Fresco
- Fresco介绍 - 一个新的android图片加载库
- 提高iPhone app里图片加载速度的方法
- Fresco 加载本地图片
- FaceBook推出的Android图片加载库-Fresco
- FaceBook推出的Android图片加载库-Fresco
- Android App 启动时显示正在加载图片(讲解+源码)
- IOS基础之设置APP的名字、设置图标、添加等待加载时的图片
- Android App 启动时显示正在加载图片(源码)
- Android App 启动时显示正在加载图片(源码)
- Fresco介绍 - 一个新的android图片加载库
- 【OSC手机App技术解析】- 列表异步线程加载图片
- js判断网页是否加载完毕 包括图片
- IOS基础之设置APP的名字、设置图标、添加等待加载时的图片
- FaceBook推出的开源图片加载库,fresco