Fresco使用

例:

主方法类:MainActivity :

Fresco使用

主方法一类:Main1Activity 【进度条;圆角;圆形】

Fresco使用

主方法儿二类:Main2Activity【请求GIT;播放;停止】

Fresco使用

主方法三类Main3Activity 【先低分辨率,后高分辨率;渐变图片】

Fresco使用



依赖:

dependencies {
    compile 'com.facebook.fresco:fresco:0.12.0'//图片加载框架fresco库开始
    compile 'com.facebook.fresco:animated-gif:0.12.0'// 支持Gif图片,需加入
    compile 'com.facebook.fresco:animated-webp:0.12.0'// 支持webP图片的动态图,需加入
    compile 'com.facebook.fresco:webpsupport:0.12.0' // 支持webP图片的静态图,需加入
    compile 'com.facebook.fresco:animated-base-support:0.12.0'// API < 14的系统如也要支持 webP图片的话加入
}


权限:

<uses-permission android:name="android.permission.INTERNET"/>


MyApplication类:
(<application/>在这个控件里加入属性:android:name=".MyApplication")

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}



主方法类:MainActivity 

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    //封装全局变量(成员变量)
    private Button btn01;
    private Button btn02;
    private Button btn03;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找控件
        btn01 = findViewById(R.id.btn01);
        btn02 = findViewById(R.id.btn02);
        btn03 = findViewById(R.id.btn03);
        //点击监听事件
        btn01.setOnClickListener(this);
        btn02.setOnClickListener(this);
        btn03.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.btn01:
                Intent intent1 = new Intent(MainActivity.this,Main1Activity.class);
                startActivity(intent1);
                break;
            case R.id.btn02:
                Intent intent2 = new Intent(MainActivity.this,Main2Activity.class);
                startActivity(intent2);
                break;
            case R.id.btn03:
                Intent intent3 = new Intent(MainActivity.this,Main3Activity.class);
                startActivity(intent3);
                break;
        }
    }
}

activity_main 布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:orientation="vertical"
    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=".MainActivity">
    <Button
        android:id="@+id/btn01"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="进度条;圆角;圆形" />
    <Button
        android:id="@+id/btn02"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="请求GIT;播放;停止" />
    <Button
        android:id="@+id/btn03"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="先低分辨率,后高分辨率;渐变图片" />
</LinearLayout>


点击跳转按钮:
添加权限:
<application>在这个控件中加入参数(需要跳转的页面)   
<activity android:name=".Main1Activity"/>
<activity android:name=".Main2Activity"/>
<activity android:name=".Main3Activity"/>

</application>



主方法一类:Main1Activity 【进度条;圆角;圆形】

public class Main1Activity extends AppCompatActivity {

    private SimpleDraweeView my_image_view;
    private Button btn_jingdutiao;
    private Button btn_yuanjiao;
    private Button btn_yuanxing;
    private Uri uri;
    private GenericDraweeHierarchyBuilder builder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main1);
        //所要加载图片的网址
        uri = Uri.parse("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1528278912215&di=11d1dbed991817f097e5c2b331ca5b18&imgtype=0&src=http%3A%2F%2Fold.bz55.com%2Fuploads%2Fallimg%2F150210%2F139-150210134411-50.jpg");

        my_image_view = findViewById(R.id.my_image_view);
        btn_jingdutiao = findViewById(R.id.btn_jingdutiao);
        btn_yuanjiao = findViewById(R.id.btn_yuanjiao);
        btn_yuanxing = findViewById(R.id.btn_yuanxing);

        jindutiao();
        yuanjiao();
        yuanxing();
    }
    //进度条
    private void jindutiao() {
        btn_jingdutiao.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //创建Builder对象,一般创建出参数对象
                builder = new GenericDraweeHierarchyBuilder(getResources());
                //创建参数对象,设置其样式为进度条
                GenericDraweeHierarchy hierarchy = builder.setProgressBarImage(new ProgressBarDrawable()).build();
                //将参数对象设置给图片控件
                my_image_view.setHierarchy(hierarchy);
                //控件加载图片,参数:网络图片的网址.
                my_image_view.setImageURI(uri);
            }
        });
    }
    //圆角
    private void yuanjiao() {
        btn_yuanjiao.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 设置圆角图片
                //设置边角的弧度,使其为圆角
                RoundingParams parames =RoundingParams.fromCornersRadius(50f);

                /* //设置图片控件的背景颜色
                parames.setOverlayColor(getResources().getColor(android.R.color.holo_red_light));//覆盖层
                //设置图片的边框颜色及边框的粗细
                parames.setBorder(getResources().getColor(android.R.color.holo_blue_light),5);//边框*/
                //这里的代码和设置圆形图片这一块代码是一种的,唯一不同就是对parames的设置.
                GenericDraweeHierarchy circularBead = builder.setRoundingParams(parames).build();
                my_image_view.setHierarchy(circularBead);
                // 加载图片
                my_image_view.setImageURI(uri);
            }
        });
    }
    //圆形
    private void yuanxing() {
        btn_yuanxing.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               //builder对象用一个即可,在这里创建出成员变量
                builder = new GenericDraweeHierarchyBuilder(getResources());
                // 设置圆形图片
                // 设置形状对象,形状为圆形
                RoundingParams parames = RoundingParams.asCircle();

                //创建设置参数,设置一个形状,把形状对象塞入
                GenericDraweeHierarchy roundness= builder.setRoundingParams(parames).build();
                //将参数对象设置给图片控件
                my_image_view.setHierarchy(roundness);
                //控件加载图片
                my_image_view.setImageURI(uri);
            }
        });
    }
}
activity_main1 布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:orientation="vertical"
    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"
    tools:context=".Main1Activity"
    xmlns:fresco="http://schemas.android.com/apk/res-auto">

    <com.facebook.drawee.view.SimpleDraweeView
        android:layout_gravity="center_horizontal"
        android:id="@+id/my_image_view"
        android:layout_width="450dp"
        android:layout_height="500dp"
        fresco:placeholderImage="@drawable/pp" />

    <Button
        android:id="@+id/btn_jingdutiao"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="进度条" />
    <Button
        android:id="@+id/btn_yuanjiao"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="圆角" />
    <Button
        android:id="@+id/btn_yuanxing"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="圆形" />
</LinearLayout>



主方法儿二类:Main2Activity【请求GIT;播放;停止】

public class Main2Activity extends AppCompatActivity {

    private SimpleDraweeView sdv_fresco_gif;
    private View btn_qingqiu;
    private View btn_bofang;
    private View btn_tingzhi;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        //找控件
        sdv_fresco_gif = findViewById(R.id.sdv_fresco_gif);

        btn_qingqiu = findViewById(R.id.btn_qingqiu);
        btn_bofang = findViewById(R.id.btn_bofang);
        btn_tingzhi = findViewById(R.id.btn_tingzhi);

        qingqiu();
        bofang();
        tingzhi();
    }
    //请求GIF动画
    private void qingqiu() {
        btn_qingqiu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //请求GIF动画,采用MVC的设计模式(注意加载GIF动画还要添加依赖)
                /* 支持 GIF 动图,需要添加:compile 'com.facebook.fresco:animated-gif:0.14.1' */
                //GIF动画网址,加载需要一段时间
                Uri uri = Uri.parse("http://p1.so.qhmsg.com/bdr/_240_/t0179d442a840b6df46.gif");
                DraweeController controller =Fresco.newDraweeControllerBuilder()
                        .setUri(uri)//设置GIF网址
                        .setAutoPlayAnimations(false)//是否自动播放动画,false为不播放
                        .setOldController(sdv_fresco_gif.getController())//内存优化
                        .build();
                sdv_fresco_gif.setController(controller);
            }
        });
    }
    // 播放
    private void bofang() {
        btn_bofang.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 动画开始
                //拿到动画对象
                Animatable animatableStart = sdv_fresco_gif.getController().getAnimatable();
                //进行非空及是否动画在播放判断
                if(animatableStart != null &&!animatableStart.isRunning()) {
                    //动画停止播放,播放动画
                    animatableStart.start();
                }
            }
        });
    }
    // 动画停止
    private void tingzhi() {
        btn_tingzhi.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 动画停止
                //拿到动画对象
                Animatable animatableStop = sdv_fresco_gif.getController().getAnimatable();
                //进行非空及是否动画在播放判断
                if(animatableStop != null &&animatableStop.isRunning()) {
                    //动画在播放,停止动画播放
                    animatableStop.stop();
                }
            }
        });
    }
}

activity_main2

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:orientation="vertical"
    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"
    tools:context=".Main2Activity"
    xmlns:fresco="http://schemas.android.com/apk/res-auto">

    <com.facebook.drawee.view.SimpleDraweeView
        android:layout_gravity="center_horizontal"
        android:id="@+id/sdv_fresco_gif"
        android:layout_width="450dp"
        android:layout_height="500dp"
        fresco:placeholderImage="@drawable/pp" />
    <Button
        android:id="@+id/btn_qingqiu"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="请求GIT" />
    <Button
        android:id="@+id/btn_bofang"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="播放" />
    <Button
        android:id="@+id/btn_tingzhi"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="停止" />
</LinearLayout>


主方法三类Main3Activity 【先低分辨率,后高分辨率;渐变图片】

public class Main3Activity extends AppCompatActivity {

    private SimpleDraweeView my_image_view;
    private Button btn_gaodi;
    private Button btn_jianbian;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);
        //找控件
        my_image_view = findViewById(R.id.my_image_view);
        btn_gaodi = findViewById(R.id.btn_gaodi);
        btn_jianbian = findViewById(R.id.btn_jianbian);

        gaodi();
        jianbian();
    }

    private void gaodi() {
        btn_gaodi.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //多图请求及图片复用
                // 先显示低分辨率的图,然后是高分辨率的图,MVC的设计模式
                // 同一个图片,不同分辨率的两个URL地址
                Uri lowUri = Uri.parse("http://img3.imgtn.bdimg.com/it/u=4045410176,95411995&fm=27&gp=0.jpg");
                Uri highUri = Uri.parse("http://img.1985t.com/uploads/attaches/2017/12/141013-eSnS9sO.jpg");
                // 控制加载图片
                DraweeController controller =Fresco.newDraweeControllerBuilder()
                        //一开始加载一个低分辨率的URL
                        .setLowResImageRequest(ImageRequest.fromUri(lowUri))
                        //然后加载一个高分辨率的URL,你真正要加载的图片
                        .setImageRequest(ImageRequest.fromUri(highUri))
                        .build();
                // 加载图片
                my_image_view.setController(controller);
            }
        });
    }

    private void jianbian() {
        btn_jianbian.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 获取图片URL
                Uri uri = Uri.parse("http://img1.yulin520.com/news/8OIFWKCGZFR0O868X20V.jpg#586_616");
                // 加载质量配置,为了实现节省CPU,随着图片下载的进行,下载完的扫描序列如下: 1, 4, 5, 10
                /* 首次调用getNextScanNumberToDecode返回为2,因为初始时,解码的扫描数为0                那么1将不会解码,下载完成4个扫描时,解码一次。下个解码为扫描数为6(5不会解码,10才会解码)*/
                ProgressiveJpegConfig jpegConfig= new ProgressiveJpegConfig() {
                    @Override
                    public int getNextScanNumberToDecode(int scanNumber) {
                        return scanNumber + 2;
                    }

                    @Override
                    public QualityInfo getQualityInfo(int scanNumber) {
                        boolean isGoodEnough =(scanNumber >= 5);
                        return ImmutableQualityInfo.of(scanNumber,isGoodEnough, false);
                    }
                };
                //上面的和下面一行是固定代码.使用使复制粘贴即可
                ImagePipelineConfig.newBuilder(Main3Activity.this).setProgressiveJpegConfig(jpegConfig).build();
                // 创建 ImageRequest 对象.
                ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)//设置URL
                        .setProgressiveRenderingEnabled(true)//打开渐进渲染
                        .build();
                DraweeController draweeController =Fresco.newDraweeControllerBuilder()
                        //必须要设置ImageRequest对象,里面包含了图片的网址.
                        .setImageRequest(request)
                        //开启用户点击重新加载图片的功能
                        .setTapToRetryEnabled(true)
                        //会复用以前的对象,可以节省内存.
                        .setOldController(my_image_view.getController())
                        .build();
                // 1设置加载的控制
                my_image_view.setController(draweeController);
            }
        });
    }
}
activity_main1

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:orientation="vertical"
    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"
    tools:context=".Main3Activity"
    xmlns:fresco="http://schemas.android.com/apk/res-auto">
    <com.facebook.drawee.view.SimpleDraweeView
        android:layout_gravity="center_horizontal"
        android:id="@+id/my_image_view"
        android:layout_width="450dp"
        android:layout_height="500dp"
        fresco:placeholderImage="@drawable/pp" />
    <Button
        android:id="@+id/btn_gaodi"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="先低分辨率,后高分辨率" />
    <Button
        android:id="@+id/btn_jianbian"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="渐变图片" />
</LinearLayout>