Fresco的使用

来源:互联网 发布:淘宝手机端卖家中心 编辑:程序博客网 时间:2024/06/01 23:08
//清单文件配置一下
public class MyApplication extendsApplication {
 
    @Override
    publicvoid onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}

  

 

 

3)因为我这里加载的是一张网络图片,所以要获得网络权限
<uses-permission android:name="android.permission.INTERNET"/>

4)用人家的框架就要按照人家的要求来是不,所以控件名字,命名空间都要听人家的
Fresco不同于其它几个图片加载库,它是基于自定义控件的,要使用控件SimpleDraweeView来显示图片,
注意,控件不支持宽高同时设置为wrap_content,默认强制设置宽高,否则不显示图片

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0"encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.nanchen.imageloadfrescodemo.MainActivity">
 
 
    <!--<com.facebook.drawee.view.SimpleDraweeView-->
        <!--android:layout_width="50dp"-->
        <!--android:layout_height="50dp"-->
        <!--android:id="@+id/main_simple_drawee_view"-->
        <!--fresco:placeholderImage="@mipmap/ic_launcher"/>-->
 
    <com.facebook.drawee.view.SimpleDraweeView
        android:layout_width="400dp"
        android:layout_height="match_parent"
        android:id="@+id/main_simple_drawee_view"
        fresco:placeholderImage="@mipmap/ic_launcher"/>
 
 
 
</RelativeLayout>

  

5)在activity中加载图片显示,Fresco 不支持相对路径的URI. 所有的URI都必须是绝对路径,并且带上该URI的scheme。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package com.example.nanchen.imageloadfrescodemo;
 
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
 
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.interfaces.DraweeController;
import com.facebook.drawee.view.SimpleDraweeView;
 
public class MainActivity extendsAppCompatActivity {
 
    privateSimpleDraweeView sdv;
 
    @Override
    protectedvoid onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        Fresco.initialize(this);//Fresco的初始化,必须调用在setContentView之前
        setContentView(R.layout.activity_main);
 
        sdv = (SimpleDraweeView) findViewById(R.id.main_simple_drawee_view);
 
        Uri uri =  Uri.parse("http://dynamic-image.yesky.com/740x-/uploadImages/2015/163/50/690V3VHW0P77.jpg");
//        sdv.setImageURI(uri);
 
        DraweeController controller = Fresco.newDraweeControllerBuilder()
                .setUri(uri)
                .setAutoPlayAnimations(true)
                .build();
        sdv.setController(controller);
    }
}

  

运行效果如下:

 

  • drawee支持如下属性:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
fresco:fadeDuration="300"// 淡入淡出的持续时间
fresco:actualImageScaleType="focusCrop" // 实际图像的缩放类型
fresco:placeholderImage="@color/wait_color" //占位图
fresco:placeholderImageScaleType="fitCenter"//占位图的缩放类型
fresco:failureImage="@drawable/error"//下载失败显示的图片
fresco:failureImageScaleType="centerInside"//失败图的缩放类型
fresco:retryImage="@drawable/retrying"
//图片加载失败时显示,提示用户点击重新加载,重复加载4次还是没有加载出来的时候才会显示failureImage的图片
fresco:retryImageScaleType="centerCrop"//重新加载的图片缩放类型
fresco:progressBarImage="@drawable/progress_bar"//进度条图片
fresco:progressBarImageScaleType="centerInside"
fresco:progressBarAutoRotateInterval="1000"
//进度图自动旋转间隔时间(单位:毫秒ms)
fresco:backgroundImage="@color/blue"
//背景图片,这里的背景图片首先被绘制
fresco:overlayImage="@drawable/watermark"
// 设置叠加图,在xml中只能设置一张叠加图片,如果需要多张图片的话,需要在java代码中设置哦
fresco:pressedStateOverlayImage="@color/red"
// 设置点击状态下的叠加图
fresco:roundAsCircle="false"//设置为圆形图
fresco:roundedCornerRadius="1dp"// 圆角半径
fresco:roundTopLeft="true"// 左上角是否为圆角
fresco:roundTopRight="false"
fresco:roundBottomLeft="false"
fresco:roundBottomRight="true"
fresco:roundWithOverlayColor="@color/corner_color"
fresco:roundingBorderWidth="2dp"//边框的宽度
fresco:roundingBorderColor="@color/border_color"//边框颜色

  

 

上面的ImageScaleType有下面一些缩放类型:

 

类型描述center居中,无缩放centerCrop保持宽高比缩小或放大,是的两边都大于或等于边界,且宽和高契合显示边界,居中显示focusCrop同centerCrop,但居中点不是中点,而是指定的某个点centerInside缩放图片使两边都在显示边界内,居中显示。和fitCenter不同,不会对图片进行放大。如果尺寸大于显示边界,则保持宽高比例缩小图片。fitCenter保持宽高比,缩小或者放大,使得图片完全显示在显示边界内,且宽或高契合显示边界,居中显示。fitStart同上,但不居中,和显示边界左上对齐。fitEnd同fitCenter,但不居中,和显示边界右下对齐。fitXY不保存宽高比,填充满显示边界。none如果要使用tile mode显示,则需要设置为none

 

多图请求

有时候需要加载很多图片,这个时候如果网络情况不是很好的情况下,一直显示占位图,体验也不是很好,我们可以先显示一个低分辨率的图片,等到大图加载完成之后,在显示真正的图片。

1
2
3
4
5
6
DraweeController controller = Fresco.newDraweeControllerBuilder()
    .setLowResImageRequest(ImageRequest.fromUri(lowResUri))
    .setImageRequest(ImageRequest.fromUri(highResUri))
    .setOldController(draweeView.getController())
    .build();
draweeView.setController(controller);

当然如果你想监听加载的过程,就加一个ControllerListen

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//写一个监听器 监听图片加载
ControllerListener listener =new BaseControllerListener(){
 
    /**
     * 当图片加载成功时会执行的方法
     * @param id
     * @param imageInfo
     * @param animatable
     */
    @Override
    publicvoid onFinalImageSet(String id, Object imageInfo, Animatable animatable) {
        super.onFinalImageSet(id, imageInfo, animatable);
    }
 
 
    /**
     * 图片加载失败时调用的方法
     * @param id
     * @param throwable
     */
    @Override
    publicvoid onFailure(String id, Throwable throwable) {
        super.onFailure(id, throwable);
    }
 
 
    /**
     *  如果图片使用渐进式,这个方法将会被回调
     * @param id
     * @param throwable
     */
    @Override
    publicvoid onIntermediateImageFailed(String id, Throwable throwable) {
        super.onIntermediateImageFailed(id, throwable);
    }
};
 
DraweeController controller = Fresco.newDraweeControllerBuilder()
        .setUri(uri)
        .setAutoPlayAnimations(true)
        .setControllerListener(listener)
        .build();
 
sdv.setController(controller);
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 倒角图片 倒角器 倒角是什么意思 自动倒角机 自动双头倒角机 双头倒角机 圆弧倒角 博士倒角机 45度倒角 双头自动倒角机 手持式倒角机 直柄倒角刀 机加工倒角 倒角铣刀 全自动切管倒角机 加工中心倒角刀 什么是倒角 圆弧倒角机 钻头倒角 电缆倒角器 手提倒角机价格 数控机床倒角 倒角剖面 倒角公式 管材倒角机 倒角模板 3dmax倒角 倒角器图片 倒角车刀 倒角命令 台式倒角机 瓷砖倒角效果图 倒角快捷键 木工倒角机 踢脚线倒角 倒角标准 磨边倒角机 双边倒角机 倒角怎么用 板材倒角机 倒角怎么标注