fresco进行代码,或者布进行实现


//配置Application类

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



//代码,通过按钮实现

package com.example.fresco;

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

import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.backends.pipeline.PipelineDraweeController;
import com.facebook.drawee.drawable.ScalingUtils;
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;
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.BasePostprocessor;
import com.facebook.imagepipeline.request.ImageRequest;
import com.facebook.imagepipeline.request.ImageRequestBuilder;
import com.facebook.imagepipeline.request.Postprocessor;

public class UpdateActivity extends AppCompatActivity {
    private SimpleDraweeView img;
    private GenericDraweeHierarchyBuilder genericDraweeHierarchyBuilder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_update);
        //获取控件
        Button bcbl = (Button) findViewById(R.id.bcbl);
        Button zhong = (Button) findViewById(R.id.zhong);
        Button yuan = (Button) findViewById(R.id.yuan);
        Button yuanjiao = (Button) findViewById(R.id.yuanjiao);
        Button bbc = (Button) findViewById(R.id.bbc);
        Button xiugai = (Button) findViewById(R.id.xiugai);
        Button er = (Button) findViewById(R.id.er);
        Button jjs = (Button) findViewById(R.id.jjs);
        Button liangbian = (Button) findViewById(R.id.liangbian);
        Button leftcenter = (Button) findViewById(R.id.leftcenter);
        img = (SimpleDraweeView) findViewById(R.id.img);

        er.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 样式设置,保持宽高比例,对图片进行缩或放,图片位置,不居中,和显示边界右下对齐
                GenericDraweeHierarchy FIT_END =genericDraweeHierarchyBuilder.setActualImageScaleType(ScalingUtils.ScaleType.FIT_END).build();
                // 图片显示
                imageDisplay(FIT_END);

            }
        });

        //使两边都在显示边界内,居中显示。如果图尺寸大于显示边界,则保持长宽比缩小图片
        liangbian.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 设置描述
                //        tv_fresco_explain.setText("使两边都在显示边界内,居中显示。如果图尺寸大于显示边界,则保持长宽比缩小图片");
                // 样式设置,使图片按比例显示在控件内,
                GenericDraweeHierarchy CENTER_INSIDE =genericDraweeHierarchyBuilder.setActualImageScaleType(ScalingUtils.ScaleType.CENTER_INSIDE).build();
                // 图片显示
                imageDisplay(CENTER_INSIDE);
            }
        });

        //左上为中点显示
        leftcenter.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 设置描述
//                tv_fresco_explain.setText("同centerCrop, 但居中点不是中点,而是指定的某个点,这里我设置为图片的左上角那点");
                //指定中心点位置
                PointF point = new PointF(0,0);
                //根据指定的点设置为图片中心,使图片按比例缩小或放大,且裁剪成正方形.
                GenericDraweeHierarchy FOCUS_CROP = genericDraweeHierarchyBuilder.setActualImageScaleType(ScalingUtils.ScaleType.FOCUS_CROP)
                        .setActualImageFocusPoint(point).build();
                // 图片显示
                imageDisplay(FOCUS_CROP);

            }
        });

        //修改图片
        xiugai.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 图片地址
                Uri uri = Uri.parse("http://120.27.23.105/images/ad/1.jpg");
                // 修改图片
                Postprocessor postProcessor = new BasePostprocessor() {
                    //重新Postprocessor名称.
                    @Override
                    public String getName() {
                        return "postProcessor";
                    }
                    //具体的进行绘制,bitmap就是下载过来的图片,绘制红色点状网络
                    @Override
                    public void process(Bitmap bitmap) {
                        for (int x = 0; x < bitmap.getWidth(); x += 3) {
                            for (int y = 0; y < bitmap.getHeight(); y += 3) {
                    //给图片点设置颜色,参数X轴,Y轴,颜色
                                bitmap.setPixel(x, y, Color.GRAY);
                            }
                        }
                    }
                };
                    // 创建图片请求
                ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
                    //对加载进行处理.参数就是处理的模型Postprocessor对象.
                        .setPostprocessor(postProcessor)
                        .build();
                    // 控制加载
                PipelineDraweeController controller = (PipelineDraweeController) Fresco.newDraweeControllerBuilder()
                        .setOldController(img.getController())
                        .setImageRequest(request)
                        .build();
                    // 加载图片
                img.setController(controller);

            }
        });

        //渐进式展示图片
        jjs.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 获取图片URL
                Uri uri = Uri.parse("http://120.27.23.105/images/ad/1.jpg");
// 加载质量配置,为了实现节省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(UpdateActivity.this).setProgressiveJpegConfig(jpegConfig).build();
// 创建 ImageRequest 对象.
                ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)//设置URL
                        .setProgressiveRenderingEnabled(true)//打开渐进 渲染
                        .build();
                DraweeController draweeController = Fresco.newDraweeControllerBuilder()
//必须要设置ImageRequest对象,里面包含了图片的网址.
                        .setImageRequest(request)
//开启用户点击重新加载图片的功能
                        .setTapToRetryEnabled(true)
//会复用以前的对象,可以节省内存.
                        .setOldController(img.getController())
                        .build();
// 1设置加载的控制
                img.setController(draweeController);

            }
        });

        //初始化显示图片
        img.setImageURI("http://pic1.sc.chinaz.com/Files/pic/pic9/201711/zzpic8416_s.jpg");
        genericDraweeHierarchyBuilder = new GenericDraweeHierarchyBuilder(getResources());

        //不包持比例
        bbc.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                GenericDraweeHierarchy FIT_XY = genericDraweeHierarchyBuilder.setActualImageScaleType(ScalingUtils.ScaleType.FIT_XY).build();
                // 图片显示
                imageDisplay(FIT_XY);
            }
        });


        //保持比例
        bcbl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 样式设置,保持宽高比例,对图片进行缩或放,图片位置居中显示(效果和上面一种类似)
                GenericDraweeHierarchy FIT_CENTER =genericDraweeHierarchyBuilder.setActualImageScaleType(ScalingUtils.ScaleType.FIT_CENTER).build();
                // 图片显示
                imageDisplay(FIT_CENTER);

            }
        });

        //圆形图片
        yuan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                RoundingParams roundingParams = RoundingParams.asCircle();
                GenericDraweeHierarchy build = genericDraweeHierarchyBuilder.setRoundingParams(roundingParams)
                        .build();
                img.setHierarchy(build);
                img.setImageURI("http://120.27.23.105/images/ad/1.jpg");
            }
        });
        //圆角边
        yuanjiao.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                RoundingParams roundingParams = RoundingParams.fromCornersRadius(60f);

                GenericDraweeHierarchy build = genericDraweeHierarchyBuilder
                        .setRoundingParams(roundingParams)
                        .build();
                img.setHierarchy(build);
                img.setImageURI("http://120.27.23.105/images/ad/1.jpg");

            }
        });

        //图片居中显示
        zhong.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                GenericDraweeHierarchy build = genericDraweeHierarchyBuilder.setActualImageScaleType(ScalingUtils.ScaleType.CENTER)
                        .build();
                img.setHierarchy(build);
                img.setImageURI("http://120.27.23.105/images/ad/1.jpg");
            }
        });
    }

    private void imageDisplay(GenericDraweeHierarchy hierarchy) {
// 加载图片
        Uri uri = Uri.parse("http://120.27.23.105/images/ad/1.jpg");
        img.setHierarchy(hierarchy);
        img.setImageURI(uri);
    }
}

//布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    android:layout_height="match_parent"
    tools:context="com.example.fresco.UpdateActivity">

    <com.facebook.drawee.view.SimpleDraweeView
        android:layout_width="200dp"
        android:layout_marginTop="50dp"
        android:layout_height="100dp"
        android:background="@color/colorAccent"
        android:layout_gravity="center_horizontal"
        android:id="@+id/img"/>

    <Button
        android:layout_marginTop="20dp"
        android:id="@+id/zhong"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="居中"/>

    <Button
        android:id="@+id/yuan"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="圆形"/>

    <Button
        android:id="@+id/yuanjiao"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="圆角"/>

    <Button
        android:id="@+id/bcbl"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="保持比例"/>

    <Button
        android:id="@+id/bbc"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="不保持比例"/>

    <Button
        android:id="@+id/jjs"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="渐进式展示图片"/>

    <Button
        android:id="@+id/xiugai"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="修改图片"/>

    <Button
        android:id="@+id/leftcenter"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="左上角为中点"/>

    <Button
        android:id="@+id/liangbian"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="两边都在显示边界内,居中显示"/>

    <Button
        android:id="@+id/er"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="不居中,和显示边界右下对齐"/>


</LinearLayout>



//单独的布局实现,不要代码

//布局实现务必要加  xmlns:fresco="http://schemas.android.com/apk/res-auto"

<?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:orientation="vertical"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" tools:context="com.example.fresco.MainActivity">

     <!-- 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" //边框颜色-->

    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/sd_vw"
        android:layout_width="100dp"
        android:layout_height="100dp"
        />

     <com.facebook.drawee.view.SimpleDraweeView
         android:id="@+id/sdv_2"
         android:layout_width="90dp"
         android:layout_height="90dp"
         android:layout_marginTop="15dp"
         fresco:actualImageScaleType="centerCrop"
         fresco:roundAsCircle="true"
        />

 <com.facebook.drawee.view.SimpleDraweeView
     android:layout_width="200dp"
     android:layout_height="200dp"
     android:id="@+id/yi"/>

    <com.facebook.drawee.view.SimpleDraweeView
        android:layout_width="200dp"
        android:layout_height="100dp"
        android:id="@+id/id_main_sdv_sdv2"/>

    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/id_main_sdv_sdv"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        fresco:actualImageScaleType="focusCrop"
        fresco:fadeDuration="3000"
        fresco:failureImage="@mipmap/ic_launcher"
        fresco:failureImageScaleType="centerInside"
        fresco:placeholderImage="@mipmap/ic_launcher"
        fresco:placeholderImageScaleType="fitCenter"
        fresco:progressBarAutoRotateInterval="1000"
        fresco:progressBarImageScaleType="centerInside"
        fresco:retryImage="@mipmap/ic_launcher"
        fresco:retryImageScaleType="centerCrop"
        fresco:roundAsCircle="false"
        fresco:viewAspectRatio="1.6" />

    <Button
        android:onClick="updateimg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="更改图片"/>

</LinearLayout>


//配置类  进行初始化

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值