Fresco动画

在这里插入图片描述

1.主页面布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <Button
                android:id="@+id/bt_fresco_spimg"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="带进度条的图片"/>

            <Button
                android:id="@+id/bt_fresco_crop"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="图片的不同裁剪"/>

            <Button
                android:id="@+id/bt_fresco_circleAndCorner"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="圆形和圆角图片"/>

            <Button
                android:id="@+id/bt_fresco_jpeg"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="渐进式展示图片"/>

            <Button
                android:id="@+id/bt_fresco_gif"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="GIF动画图片"/>

            <Button
                android:id="@+id/bt_fresco_multi"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="多图请求及图片复用"/>

            <Button
                android:id="@+id/bt_fresco_listener"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="图片加载监听"/>

            <Button
                android:id="@+id/bt_fresco_resize"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="图片缩放和旋转"/>

            <Button
                android:id="@+id/bt_fresco_modifyImg"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="修改图片"/>

            <Button
                android:id="@+id/bt_fresco_autoSizeImg"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="动态展示图片"/>

        </LinearLayout>

    </ScrollView>

</LinearLayout>

2.主页面代码

package com.bawie.demo1;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

import com.bawie.demo1.view.FrescoSpimgActivity;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button bt_fresco_spimg;
    private Button bt_fresco_crop;
    private Button bt_fresco_circleAndCorner;
    private Button bt_fresco_jpeg;
    private Button bt_fresco_gif;
    private Button bt_fresco_multi;
    private Button bt_fresco_listener;
    private Button bt_fresco_resize;
    private Button bt_fresco_modifyImg;
    private Button bt_fresco_autoSizeImg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        bt_fresco_spimg = (Button) findViewById(R.id.bt_fresco_spimg);
        bt_fresco_crop = (Button) findViewById(R.id.bt_fresco_crop);
        bt_fresco_circleAndCorner = (Button) findViewById(R.id.bt_fresco_circleAndCorner);
        bt_fresco_jpeg = (Button) findViewById(R.id.bt_fresco_jpeg);
        bt_fresco_gif = (Button) findViewById(R.id.bt_fresco_gif);
        bt_fresco_multi = (Button) findViewById(R.id.bt_fresco_multi);
        bt_fresco_listener = (Button) findViewById(R.id.bt_fresco_listener);
        bt_fresco_resize = (Button) findViewById(R.id.bt_fresco_resize);
        bt_fresco_modifyImg = (Button) findViewById(R.id.bt_fresco_modifyImg);
        bt_fresco_autoSizeImg = (Button) findViewById(R.id.bt_fresco_autoSizeImg);

        bt_fresco_spimg.setOnClickListener(this);
        bt_fresco_crop.setOnClickListener(this);
        bt_fresco_circleAndCorner.setOnClickListener(this);
        bt_fresco_jpeg.setOnClickListener(this);
        bt_fresco_gif.setOnClickListener(this);
        bt_fresco_multi.setOnClickListener(this);
        bt_fresco_listener.setOnClickListener(this);
        bt_fresco_resize.setOnClickListener(this);
        bt_fresco_modifyImg.setOnClickListener(this);
        bt_fresco_autoSizeImg.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.bt_fresco_spimg://带进度条的图片
                startActivity(new Intent(this,FrescoSpimgActivity.class));
                break;
            case R.id.bt_fresco_crop://图片的不同裁剪

                break;
            case R.id.bt_fresco_circleAndCorner://圆形和圆角图片

                break;
            case R.id.bt_fresco_jpeg://渐进式展示图片

                break;
            case R.id.bt_fresco_gif://GIF动画图片

                break;
            case R.id.bt_fresco_multi://多图请求及图片复用

                break;
            case R.id.bt_fresco_listener://图片加载监听

                break;
            case R.id.bt_fresco_resize://图片缩放和旋转

                break;
            case R.id.bt_fresco_modifyImg://修改图片

                break;
            case R.id.bt_fresco_autoSizeImg://动态展示图片

                break;
        }
    }
}

3.全局初始化

public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }

4.带进度条的图片

布局

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    tools:context=".view.FrescoSpimgActivity">

    <!--fresco:placeholderImage="@drawable/my_drawable":默认占位图片-->
    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/sdv_fresco_spimg"
        android:layout_width="130dp"
        android:layout_height="130dp"
        android:layout_gravity="center"
        fresco:placeholderImage="@mipmap/ic_launcher" />

</android.support.constraint.ConstraintLayout>

主页面代码

package com.bawie.demo1.view;

import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import com.bawie.demo1.R;
import com.facebook.drawee.drawable.ProgressBarDrawable;
import com.facebook.drawee.generic.GenericDraweeHierarchy;
import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder;
import com.facebook.drawee.view.SimpleDraweeView;

public class FrescoSpimgActivity extends AppCompatActivity {

    private SimpleDraweeView sdv_fresco_spimg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fresco_spimg);
        initView();
        //显示所要加载的图片
        Uri parse = Uri.parse("http://assets.kgc.cn/upload/openteacher/20160831/1472636067718985.jpg");
        //创建Build对象
        GenericDraweeHierarchyBuilder genericDraweeHierarchyBuilder = new GenericDraweeHierarchyBuilder(getResources());
        //通过这个对象设置进度条的样式
        GenericDraweeHierarchy build = genericDraweeHierarchyBuilder.setProgressBarImage(new ProgressBarDrawable()).build();
        //把样式设置给图片控件
        sdv_fresco_spimg.setHierarchy(build);
        //加载图片成功
        sdv_fresco_spimg.setImageURI(parse);
    }

    private void initView() {
        sdv_fresco_spimg = (SimpleDraweeView) findViewById(R.id.sdv_fresco_spimg);
    }
}

5.圆形和圆角图片

布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/sdv_fresco_circleandcorner"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:layout_gravity="center"
        fresco:placeholderImage="@drawable/a_9" />

    <Button
        android:id="@+id/bt_fresco_circle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="48dp"
        android:text="设置圆形图片" />

    <Button
        android:id="@+id/bt_fresco_corner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="设置圆角图片" />

</LinearLayout>

主代码

package com.bawie.demo1.view;

import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

import com.bawie.demo1.R;
import com.facebook.drawee.generic.GenericDraweeHierarchy;
import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder;
import com.facebook.drawee.generic.RoundingParams;
import com.facebook.drawee.view.SimpleDraweeView;

public class FrescoCircleAndCornerActivity extends AppCompatActivity implements View.OnClickListener {

    private SimpleDraweeView sdv_fresco_circleandcorner;
    private Button bt_fresco_circle;
    private Button bt_fresco_corner;
    private GenericDraweeHierarchyBuilder mBuilder;
    private Uri mParse;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fresco_circle_and_corner);
        initView();
        //网上请求图片的路径
        mParse = Uri.parse("http://img4q.duitang.com/uploads/item/201304/27/20130427043538_wAfHC.jpeg");
        //创建Builder对象
        mBuilder = new GenericDraweeHierarchyBuilder(getResources());

    }

    private void initView() {
        sdv_fresco_circleandcorner = (SimpleDraweeView) findViewById(R.id.sdv_fresco_circleandcorner);
        bt_fresco_circle = (Button) findViewById(R.id.bt_fresco_circle);
        bt_fresco_corner = (Button) findViewById(R.id.bt_fresco_corner);

        bt_fresco_circle.setOnClickListener(this);
        bt_fresco_corner.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.bt_fresco_circle://圆形
                //设置形状对象,圆形
                RoundingParams roundingParams = RoundingParams.asCircle();
                //把形状设置给参数对象
                GenericDraweeHierarchy rounding = mBuilder.setRoundingParams(roundingParams).build();
                //设置给图片控件
                sdv_fresco_circleandcorner.setHierarchy(rounding);
                //加载图片的控件
                sdv_fresco_circleandcorner.setImageURI(mParse);
                break;
            case R.id.bt_fresco_corner://圆角边界
                RoundingParams roundingParams1 = RoundingParams.fromCornersRadius(50f);

                GenericDraweeHierarchy build = mBuilder.setRoundingParams(roundingParams1).build();
                sdv_fresco_circleandcorner.setHierarchy(build);
                //加载图片控件
                sdv_fresco_circleandcorner.setImageURI(mParse);

                break;
        }
    }
}

6.渐进式展示图片

布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.facebook.drawee.view.SimpleDraweeView
        android:layout_gravity="center"
        android:id="@+id/sdv_fresco_jpeg"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:layout_marginTop="48dp"
        fresco:placeholderImage="@drawable/a_9" />

    <Button
        android:id="@+id/sdv_fresco_askImg"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="48dp"
        android:text="请求网络图片" />

</LinearLayout>

主代码

package com.bawie.demo1.view;

import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

import com.bawie.demo1.R;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.controller.AbstractDraweeController;
import com.facebook.drawee.view.SimpleDraweeView;
import com.facebook.imagepipeline.core.ImagePipelineConfig;
import com.facebook.imagepipeline.decoder.ProgressiveJpegConfig;
import com.facebook.imagepipeline.image.ImmutableQualityInfo;
import com.facebook.imagepipeline.image.QualityInfo;
import com.facebook.imagepipeline.request.ImageRequest;
import com.facebook.imagepipeline.request.ImageRequestBuilder;

public class FrescoJpegActivity extends AppCompatActivity implements View.OnClickListener {

    private SimpleDraweeView sdv_fresco_jpeg;
    private Button sdv_fresco_askImg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fresco_jpeg);
        initView();
    }

    private void initView() {
        sdv_fresco_jpeg = (SimpleDraweeView) findViewById(R.id.sdv_fresco_jpeg);
        sdv_fresco_askImg = (Button) findViewById(R.id.sdv_fresco_askImg);

        sdv_fresco_askImg.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.sdv_fresco_askImg:
                // 获取图片URL
                Uri uri = Uri.parse("https://note.wiz.cn/wizas/a/users/avatar/36e04b40-cc54-41c5-995a-7aad33f45dd9");
                //
                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(this).setProgressiveJpegConfig(jpegConfig).build();
                //创建ImageRequest对象
                ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
                        .setProgressiveRenderingEnabled(true)//打开渐进模式
                        .build();
                AbstractDraweeController draweeController = Fresco.newDraweeControllerBuilder()
                        .setImageRequest(request)
                        .setTapToRetryEnabled(true)
                        .setOldController(sdv_fresco_jpeg.getController())
                        .build();
                sdv_fresco_jpeg.setController(draweeController);

                break;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42785994/article/details/84573897