您的位置:首页 > 移动开发

Fresco加载app内的图片,包括gif动图

2016-07-29 11:34 417 查看
[我的项目地址:请点击这里](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);
}
}


注释写的比较详细,大家应该很容易懂,来张效果图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息