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

来源:互联网 发布:最大化快捷键 mac 编辑:程序博客网 时间:2024/05/17 07:22

[我的项目地址:请点击这里](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);    }}

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



0 0
原创粉丝点击