fresco图片框架简单使用

   //fresco基础依赖
    implementation 'com.facebook.fresco:fresco:0.14.1'

    //播放gif图   (如果用不到gif图就不用导入依赖)
    implementation 'com.facebook.fresco:animated-gif:0.14.1'
//fresco 的弊端就是宽和高不能设置为wrap_content;
//主布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity">

     <Button
         android:id="@+id/progress"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:text="带进度条图片"
         />

    <Button
        android:id="@+id/clipping"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="图片的复用"
        />

    <Button
        android:id="@+id/gif"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="GIF图片"
        />

    <Button
        android:id="@+id/rotundity"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="圆形圆角图片"
        />

</LinearLayout>
//图片复用布局   
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".view.ClippingActivity">

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

    <Button
        android:id="@+id/bt_fresco_multiImg"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="48dp"
        android:text="先显示低分辨率的图,然后是高分辨率的图" />

    <Button
        android:id="@+id/bt_fresco_thumbnailImg"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="本地缩略图预览" />

    <Button
        android:id="@+id/bt_fresco_multiplexImg"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="本地图片复用" />
</LinearLayout>
//gif
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    tools:context=".view.GifActivity">


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

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

    <Button
        android:id="@+id/stopAnim"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="动画停止" />

    <Button
        android:id="@+id/startAnim"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="动画开始" />

</LinearLayout>
//进度条加载图片布局
<?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.ProgresActivity">

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

</android.support.constraint.ConstraintLayout>
.//设置圆形图片
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".view.RotundityActivity">

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

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

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

</LinearLayout>
//初始化继承Application
package com.example.fresco;

import android.app.Application;

import com.facebook.drawee.backends.pipeline.Fresco;

 
public class MyApplication extends Application {

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

//复用图片.java
package com.example.fresco.view;

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

import com.example.fresco.R;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.controller.AbstractDraweeController;
import com.facebook.drawee.view.SimpleDraweeView;
import com.facebook.imagepipeline.request.ImageRequest;

import java.io.File;

public class ClippingActivity extends AppCompatActivity implements View.OnClickListener {

    private SimpleDraweeView sdv_fresco_multi;
    private Button bt_fresco_multiImg;
    private Button bt_fresco_thumbnailImg;
    private Button bt_fresco_multiplexImg;

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

    private void initView() {
        sdv_fresco_multi = (SimpleDraweeView) findViewById(R.id.sdv_fresco_multi);
        bt_fresco_multiImg = (Button) findViewById(R.id.bt_fresco_multiImg);
        bt_fresco_thumbnailImg = (Button) findViewById(R.id.bt_fresco_thumbnailImg);
        bt_fresco_multiplexImg = (Button) findViewById(R.id.bt_fresco_multiplexImg);

        bt_fresco_multiImg.setOnClickListener(this);
        bt_fresco_thumbnailImg.setOnClickListener(this);
        bt_fresco_multiplexImg.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.bt_fresco_multiImg:
                Uri lowUri = Uri.parse("https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=91883135,2320948421&fm=111&gp=0.jpg");
                Uri highUri = Uri.parse("https://img5.duitang.com/uploads/item/201312/03/20131203153823_Y4y8F.jpeg");
                //控制加载的图片控制器
                AbstractDraweeController controller = Fresco.newDraweeControllerBuilder()
                        .setLowResImageRequest(ImageRequest.fromUri(lowUri))
                        .setImageRequest(ImageRequest.fromUri(highUri))
                        .build();

                //加载图片
                sdv_fresco_multi.setController(controller);
                break;
            case R.id.bt_fresco_thumbnailImg:
                Uri uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "big.jpg"));
                break;
            case R.id.bt_fresco_multiplexImg:

                break;
        }
    }
}

//gif图片.java
package com.example.fresco.view;

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

import com.example.fresco.R;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.controller.AbstractDraweeController;
import com.facebook.drawee.view.SimpleDraweeView;

public class GifActivity extends AppCompatActivity implements View.OnClickListener {

    private SimpleDraweeView gif;
    private Button askImg;
    private Button stopAnim;
    private Button startAnim;

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

    private void initView() {
        gif = (SimpleDraweeView) findViewById(R.id.gif);
        askImg = (Button) findViewById(R.id.askImg);
        stopAnim = (Button) findViewById(R.id.stopAnim);
        startAnim = (Button) findViewById(R.id.startAnim);

        askImg.setOnClickListener(this);
        stopAnim.setOnClickListener(this);
        startAnim.setOnClickListener(this);


    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.askImg:
                Uri uri = Uri.parse("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1514259038111&di=312e8557563f428353811cc457f96ee3&imgtype=0&src=http%3A%2F%2Fimg.mp.itc.cn%2Fupload%2F20161116%2Ffc10ee2abef545c7bbd6f46a09c20ed2_th.gif");

                AbstractDraweeController build = Fresco.newDraweeControllerBuilder()
                        .setUri(uri)
                        .setAutoPlayAnimations(true)//是否播放动画
                        .setOldController(gif.getController())//内存优化
                        .build();

                gif.setController(build);
                break;
            case R.id.stopAnim://停止动画
                Animatable animatable1 = gif.getController().getAnimatable();
                animatable1.stop();
                break;
            case R.id.startAnim://开始动画
                if(gif.getController() != null){
                    Animatable animatable = gif.getController().getAnimatable();
                    if(animatable != null && !animatable.isRunning()){
                        animatable.start();
                    }
                }
                break;
        }
    }
}

//进度条展示图片.java
package com.example.fresco.view;

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

import com.example.fresco.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 ProgresActivity extends AppCompatActivity {

    private SimpleDraweeView simple;

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

        //
        Uri parse = Uri.parse("http://p0.ifengimg.com/pmop/2018/0706/C8E15071A7A6A62D086340B910F38682EDC95DCD_size183_w1024_h1535.jpeg");

        //创建Build对象
        GenericDraweeHierarchyBuilder genericDraweeHierarchyBuilder = new GenericDraweeHierarchyBuilder(getResources());
        //通过这个对象设置今天的样式
        GenericDraweeHierarchy build = genericDraweeHierarchyBuilder.setProgressBarImage(new ProgressBarDrawable()).build();

        //把样式设置给图片控件
        simple.setHierarchy(build);
        //加载图片成功
        simple.setImageURI(parse);

    }

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

//设置圆形,圆角图片.java
package com.example.fresco.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.example.fresco.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 RotundityActivity extends AppCompatActivity implements View.OnClickListener {

    private SimpleDraweeView simple;
    private Button circle;
    private Button corner;
    Uri mUri;
    private RoundingParams mParams;
    GenericDraweeHierarchyBuilder builder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_rotundity);
        initView();
      mUri = Uri.parse("http://img4q.duitang.com/uploads/item/201304/27/20130427043538_wAfHC.jpeg");

        //创建Builder对象
         builder = new GenericDraweeHierarchyBuilder(getResources());
    }

    private void initView() {
        simple = (SimpleDraweeView) findViewById(R.id.simple);
        circle = (Button) findViewById(R.id.circle);
        corner = (Button) findViewById(R.id.corner);

        circle.setOnClickListener(this);
        corner.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.circle:
                //设置形状对象,形状为圆形
                mParams = RoundingParams.asCircle();
                //把形状设置给参数对象
                GenericDraweeHierarchy rounding = builder.setRoundingParams(mParams).build();
                //设置给图片控件
                simple.setHierarchy(rounding);
                //加载图片控件
                simple.setImageURI(mUri);
                break;
            case R.id.corner:
                RoundingParams roundingParams = RoundingParams.fromCornersRadius(50f);
                GenericDraweeHierarchy build = builder.setRoundingParams(roundingParams).build();
                simple.setHierarchy(build);
                simple.setImageURI(mUri);
                break;
        }
    }
}

//mainactivity.java
package com.example.fresco;

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

import com.example.fresco.view.ClippingActivity;
import com.example.fresco.view.GifActivity;
import com.example.fresco.view.ProgresActivity;
import com.example.fresco.view.RotundityActivity;

import java.util.Map;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button progress;
    private Button clipping;
    private Button gif;
    private Button rotundity;

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

    private void initView() {
        progress = (Button) findViewById(R.id.progress);
        clipping = (Button) findViewById(R.id.clipping);
        gif = (Button) findViewById(R.id.gif);
        rotundity = (Button) findViewById(R.id.rotundity);
        progress.setOnClickListener(this);
        clipping.setOnClickListener(this);
        gif.setOnClickListener(this);
        rotundity.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.progress:
                Intent intent = new Intent(MainActivity.this,ProgresActivity.class);

                startActivity(intent);

                break;
            case R.id.clipping:
                Intent intent1 = new Intent(MainActivity.this,ClippingActivity.class);

                startActivity(intent1);
                break;
            case R.id.gif:

                Intent intent2 = new Intent(MainActivity.this,GifActivity.class);

                startActivity(intent2);
                break;
            case R.id.rotundity:
                Intent intent3 = new Intent(MainActivity.this,RotundityActivity.class);

                startActivity(intent3);
                break;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/NorthHar/article/details/84572512