//配置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);
}