fresco进行代码,或者布进行实现
来源:互联网 发布:linux named配置文件 编辑:程序博客网 时间:2024/05/16 14:50
//代码,通过按钮实现
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);}
阅读全文