[我的项目地址:请点击这里](https://github.com/1181631922/FrescoPicLoad)
原来用项目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);
}
}
注释写的比较详细,大家应该很容易懂,来张效果图