简介:
由Facebook最新推出的一款用于Android应用中展示图片的强大图片库,采用MVC设计模式。(被誉为最好的图片处理框架,facebook出品,必出精品)
优势:
底层直接用的是C语言,所以对于内存的管理特别强大,一张图片如果 picasso 来处理要用80%的话,那么fresco只占40%,必须使用它的自定义控件(这一点也是弊端,导致如果后期更换图片处理框架,不用Fresco,会特别麻烦),设置src属性,可以直接引用GIF…,各方面都不用管的.
•Fresco中的image pipeline模块。负责从网络,从本地文件系统,本地资源加载图片。为了最大限度节省空间和CPU时间,它含有3级缓存设计(2级内存,1级文件)。
•Fresco中的Drawees 模块,显示loading图,当图片不再显示在屏幕上时,及时地释放内存和空间占用。
五大特点:
内存管理:在5.0以下系统,Fresco将图片放到一个特别的内存区域。然而,在图片不显示的时候,占用的内存会自动被释放。这会使得APP更加流畅,减少因图片内存占用而引发的OOM.(内存分配采用:系统匿名共享内存)
渐进式呈现图片:渐进式图片格式先呈现大致的图片轮廓,然后随着图片下载的继续,呈现逐渐清晰的图片,在网速慢的情况下有极大的优越性,可带来更好的用户体验。
支持加载Gif图,支持WebP格式。PNG,JPG,Webp
图像的呈现:
(1)自定义居中焦点(对人脸等图片显示非常有帮助)。
(2)圆角图,当然圆圈也行。
(3)下载失败之后,点击重新下载。
(4)自定义占位图,自定义overlay, 或者进度条。
(5)指定用户按压时的overlay。
图像的加载:
(1)为同一个图片指定不同的远程路径,或者使用已经存在本地缓存中的图片。
(2)先显示一个低解析度的图片,等高清图下载完毕再显示高清图。
(3)加载完成回调通知。
(4)对于本地图,如有EXIF缩略图,在大图加载完成之前,可先显示缩略图。
(5)缩放或者旋转图片。
(6)处理已下载的图片。
**
作用:
**带进度条的图片、图片的不同裁剪、圆形和圆角图片、渐进式展示图片、Gif动画图片、多图请求及图片复用、图片加载监听、图片缩放和旋转、修改图片和动态展示.
好了接下来 我们今天一起来看一下通过Fresco可以对图片进行哪些操作:(我们今天先列举一部分)
首先:
我们要想使用Fresco,我们需要导入依赖,这个就根据我们所需要的配置相应的依赖就可以
dependencies {
/*Fresco的基础依赖*/
implementation 'com.facebook.fresco:fresco:0.14.1'
/*Fresco的GIF功能的依赖*/
implementation 'com.facebook.fresco:animated-gif:0.14.1'
/*支持 WebP (静态图+动图),需要添加*/
compile 'com.facebook.fresco:animated-webp:0.12.0'
compile 'com.facebook.fresco:webpsupport:0.12.0'
/* 仅支持 WebP 静态图,需要添加*/
compile 'com.facebook.fresco:webpsupport:0.12.0'
}
其次:
创建一个自定义类MyApplication,继承Application
package com.example.fresco;
import android.app.Application;
import com.facebook.drawee.backends.pipeline.Fresco;
/**
* date:2018/11/27
* author:李壮(HUAWEI)
* function:
*/
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
既然我们自定义类那我们必须在(AndroidManifest.xml)清单文件中进行注册,并且我们加载图片的过程中需要访问网络,所以我们需要在此配置网络权限
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name=".MyApplication"
</application>
好到这里我们就将fresc所需的环境搭建完毕
接下来我们就开始具体功能的操作:
MainActivity:
初始化控件id,获取相应的资源控件,实现页面跳转至具体功能的页面
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.AutoSizeActivity;
import com.example.fresco.view.CircleAndCornerActivity;
import com.example.fresco.view.GifActivity;
import com.example.fresco.view.JpegActivity;
import com.example.fresco.view.MultiActivity;
import com.example.fresco.view.ProgressBarActivity;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btn_progressBar_icon;
private Button btn_crop_icon;
private Button btn_circleAndCorner_icon;
private Button btn_jpeg_icon;
private Button btn_gif_icon;
private Button btn_multi_icon;
private Button btn_listener_icon;
private Button btn_resize_icon;
private Button btn_update_icon;
private Button btn_autoSize_icon;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件资源
initView();
}
//获取资源id
private void initView() {
btn_progressBar_icon = (Button) findViewById(R.id.btn_progressBar_icon);
btn_crop_icon = (Button) findViewById(R.id.btn_crop_icon);
btn_circleAndCorner_icon = (Button) findViewById(R.id.btn_circleAndCorner_icon);
btn_jpeg_icon = (Button) findViewById(R.id.btn_jpeg_icon);
btn_gif_icon = (Button) findViewById(R.id.btn_gif_icon);
btn_multi_icon = (Button) findViewById(R.id.btn_multi_icon);
btn_listener_icon = (Button) findViewById(R.id.btn_listener_icon);
btn_resize_icon = (Button) findViewById(R.id.btn_resize_icon);
btn_update_icon = (Button) findViewById(R.id.btn_update_icon);
btn_autoSize_icon = (Button) findViewById(R.id.btn_autoSize_icon);
btn_progressBar_icon.setOnClickListener(this);
btn_crop_icon.setOnClickListener(this);
btn_circleAndCorner_icon.setOnClickListener(this);
btn_jpeg_icon.setOnClickListener(this);
btn_gif_icon.setOnClickListener(this);
btn_multi_icon.setOnClickListener(this);
btn_listener_icon.setOnClickListener(this);
btn_resize_icon.setOnClickListener(this);
btn_update_icon.setOnClickListener(this);
btn_autoSize_icon.setOnClickListener(this);
}
//根据相应的点击事件跳转至相应的功能页面
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_progressBar_icon://带进度条的图片
Intent ProgressBarIntent = new Intent(this,ProgressBarActivity.class);
startActivity(ProgressBarIntent);
finish();
break;
case R.id.btn_crop_icon://图片的不同裁剪
break;
case R.id.btn_circleAndCorner_icon://圆形和圆角的图片
Intent CircleAndCornerIntent = new Intent(this,CircleAndCornerActivity.class);
startActivity(CircleAndCornerIntent);
finish();
break;
case R.id.btn_jpeg_icon://渐进式展示图片
Intent JpegIntent = new Intent(this,JpegActivity.class);
startActivity(JpegIntent);
finish();
break;
case R.id.btn_gif_icon://Gif动画图片
Intent GifIntent = new Intent(this,GifActivity.class);
startActivity(GifIntent);
finish();
break;
case R.id.btn_multi_icon://多图请求及图片复用
Intent MultiIntent = new Intent(this,MultiActivity.class);
startActivity(MultiIntent);
finish();
break;
case R.id.btn_listener_icon://图片加载监听
break;
case R.id.btn_resize_icon://图片缩放和旋转
break;
case R.id.btn_update_icon://修改图片
break;
case R.id.btn_autoSize_icon://动态展示图片
Intent AutoSizeIntent = new Intent(this,AutoSizeActivity.class);
startActivity(AutoSizeIntent);
finish();
break;
}
}
}
主页的布局文件:
<?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:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/btn_progressBar_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="带进度条的图片"/>
<Button
android:id="@+id/btn_crop_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="图片的不同裁剪"/>
<Button
android:id="@+id/btn_circleAndCorner_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="圆形和圆角的图片"/>
<Button
android:id="@+id/btn_jpeg_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="渐进式展示图片"/>
<Button
android:id="@+id/btn_gif_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Gif动画图片"/>
<Button
android:id="@+id/btn_multi_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="多图请求及图片复用"/>
<Button
android:id="@+id/btn_listener_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="图片加载监听"/>
<Button
android:id="@+id/btn_resize_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="图片缩放和旋转"/>
<Button
android:id="@+id/btn_update_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="修改图片"/>
<Button
android:id="@+id/btn_autoSize_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="动态展示图片"/>
</LinearLayout>
1.展示带进度条样式的图片:
ProgressBarActivity:
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 ProgressBarActivity extends AppCompatActivity {
private SimpleDraweeView sdv_progressBar_icon;
private String path = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1543329113431&di=551287617c4e82f27f19f82d7af4da57&imgtype=0&src=http%3A%2F%2Fimgsrc.baidu.com%2Fimage%2Fc0%253Dshijue1%252C0%252C0%252C294%252C40%2Fsign%3D5bdd825b5b0fd9f9b41a5d2a4d44be5f%2Fd62a6059252dd42a9811ac8c093b5bb5c9eab8f9.jpg";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_progress);
initView();
//1.显示所要加载的图片
Uri parse = Uri.parse(path);
//2.创建Build对象
GenericDraweeHierarchyBuilder genericDraweeHierarchyBuilder = new GenericDraweeHierarchyBuilder(getResources());
//3.通过这个对象设置进度条的样式
GenericDraweeHierarchy build = genericDraweeHierarchyBuilder.setProgressBarImage(new ProgressBarDrawable()).build();
//4.把样式设置给图片控件
sdv_progressBar_icon.setHierarchy(build);
//5.加载图片成功
sdv_progressBar_icon.setImageURI(parse);
}
private void initView() {
sdv_progressBar_icon = (SimpleDraweeView) findViewById(R.id.sdv_progressBar_icon);
}
}
相应布局文件:
<?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.ProgressBarActivity">
<!--fresco:placeholderImage="@drawable/my_drawable":默认占位图片-->
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/sdv_progressBar_icon"
android:layout_width="130dp"
android:layout_height="130dp"
android:layout_gravity="center"
fresco:placeholderImage="@mipmap/ic_launcher" />
</android.support.constraint.ConstraintLayout>
2.圆形和圆角样式的图片:
CircleAndCornerActivity:
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 CircleAndCornerActivity extends AppCompatActivity implements View.OnClickListener {
private SimpleDraweeView sdv_circleandcorner_icon;
private Button bt_fresco_circle;
private Button bt_fresco_corner;
private GenericDraweeHierarchyBuilder mBuilder;
private Uri mUri;
private RoundingParams mParams;
private String Path = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1543329113431&di=551287617c4e82f27f19f82d7af4da57&imgtype=0&src=http%3A%2F%2Fimgsrc.baidu.com%2Fimage%2Fc0%253Dshijue1%252C0%252C0%252C294%252C40%2Fsign%3D5bdd825b5b0fd9f9b41a5d2a4d44be5f%2Fd62a6059252dd42a9811ac8c093b5bb5c9eab8f9.jpg";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_circle_and_corner);
initView();
mUri = Uri.parse(Path);
//1.创建Build对象
mBuilder = new GenericDraweeHierarchyBuilder(getResources());
}
private void initView() {
sdv_circleandcorner_icon = (SimpleDraweeView) findViewById(R.id.sdv_circleandcorner_icon);
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://1.设置圆形
//1.1设置形状对象,形状为圆形
mParams = RoundingParams.asCircle();
//1.2把形状设置给参数对象
GenericDraweeHierarchy rounding = mBuilder.setRoundingParams(mParams).build();
//1.3设置图片给控件
sdv_circleandcorner_icon.setHierarchy(rounding);
//1.4加载图片控件
sdv_circleandcorner_icon.setImageURI(mUri);
break;
case R.id.bt_fresco_corner://2.设置圆角
//2.1设置形状对象,形状为圆角
RoundingParams roundingParams = RoundingParams.fromCornersRadius(50f);
//2.2把形状设置给参数对象
GenericDraweeHierarchy build = mBuilder.setRoundingParams(roundingParams).build();
//2.3设置图片给控件
sdv_circleandcorner_icon.setHierarchy(build);
//2.4加载图片控件
sdv_circleandcorner_icon.setImageURI(mUri);
break;
}
}
}
布局文件:
<?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.CircleAndCornerActivity">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/sdv_circleandcorner_icon"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_gravity="center"
fresco:placeholderImage="@mipmap/ic_launcher" />
<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>
3.渐进式展示图片:
JpegActivity:
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.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 JpegActivity extends AppCompatActivity implements View.OnClickListener {
private SimpleDraweeView sdv_fresco_jpeg;
private Button sdv_fresco_askImg;
private String Path = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1543329113431&di=551287617c4e82f27f19f82d7af4da57&imgtype=0&src=http%3A%2F%2Fimgsrc.baidu.com%2Fimage%2Fc0%253Dshijue1%252C0%252C0%252C294%252C40%2Fsign%3D5bdd825b5b0fd9f9b41a5d2a4d44be5f%2Fd62a6059252dd42a9811ac8c093b5bb5c9eab8f9.jpg";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_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:
//1.获取图片地址
Uri parse = Uri.parse(Path);
//2.加载质量配置,为了实现节省GPU,随着图片的下载,下完的扫描序列:1,4,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(this).setProgressiveJpegConfig(jpegConfig).build();
//创建ImageRequest对象
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(parse)
.setProgressiveRenderingEnabled(true)//设置打开渐进模式
.build();
AbstractDraweeController draweeController = Fresco.newDraweeControllerBuilder()
.setImageRequest(request)
.setTapToRetryEnabled(true)
.setOldController(sdv_fresco_jpeg.getController())//内存优化
.build();
sdv_fresco_jpeg.setController(draweeController);
break;
}
}
}
布局文件:
<?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="@mipmap/ic_launcher" />
<Button
android:id="@+id/sdv_fresco_askImg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:text="请求网络图片" />
</LinearLayout>
4.Gif动画图片:
GifActivity:
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;
/**
* 实现GIF的效果记得添加GIF的依赖
*/
public class GifActivity extends AppCompatActivity implements View.OnClickListener {
private SimpleDraweeView sdv_fresco_gif;
private Button bt_fresco_askImg;
private Button bt_fresco_stopAnim;
private Button bt_fresco_startAnim;
private String GifPath = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1543330405675&di=876ac3318ec9a21454e12a4f563cc04e&imgtype=0&src=http%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FXIbbJFPiamFAvjwicjXdEAPScWaQVdXicH8exiaD6vXibQU6c4jJiciaebibhUQQdib93wXLRIicHIrtPqvIU8OzleZpPK3g%2F640%3Fwx_fmt%3Dgif";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gif);
initView();
}
private void initView() {
sdv_fresco_gif = (SimpleDraweeView) findViewById(R.id.sdv_fresco_gif);
bt_fresco_askImg = (Button) findViewById(R.id.bt_fresco_askImg);
bt_fresco_stopAnim = (Button) findViewById(R.id.bt_fresco_stopAnim);
bt_fresco_startAnim = (Button) findViewById(R.id.bt_fresco_startAnim);
bt_fresco_askImg.setOnClickListener(this);
bt_fresco_stopAnim.setOnClickListener(this);
bt_fresco_startAnim.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_fresco_askImg:
//1.首先加载Gif动画地址,这个加载过程需要一段时间
Uri uri = Uri.parse(GifPath);
AbstractDraweeController controller = Fresco.newDraweeControllerBuilder()
.setUri(uri)
.setAutoPlayAnimations(false)//设置是否自动播放,true为播放,false为不播放
.setOldController(sdv_fresco_gif.getController())//内存优化
.build();
sdv_fresco_gif.setController(controller);
break;
case R.id.bt_fresco_stopAnim:
if (sdv_fresco_gif.getController() != null){
Animatable animatable = sdv_fresco_gif.getController().getAnimatable();
//非空判断
if(animatable != null){
//停止播放
animatable.stop();
}
}
break;
case R.id.bt_fresco_startAnim:
if (sdv_fresco_gif.getController() != null){
Animatable animatable = sdv_fresco_gif.getController().getAnimatable();
//非空判断同时判断有没有播放
if(animatable != null && !animatable.isRunning()){
//开始播放
animatable.start();
}
}
break;
}
}
}
布局文件:
<?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_gif"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_marginTop="48dp"
android:layout_gravity="center"
fresco:placeholderImage="@mipmap/ic_launcher" />
<Button
android:id="@+id/bt_fresco_askImg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:text="请求gif图片" />
<Button
android:id="@+id/bt_fresco_stopAnim"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="动画停止" />
<Button
android:id="@+id/bt_fresco_startAnim"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="动画开始" />
</LinearLayout>
5.多图请求及图片复用:
MultiActivity :
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 MultiActivity 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;
private String lowPath = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1543333820854&di=6d3a116b3dce45c9a475b2f11cacc947&imgtype=0&src=http%3A%2F%2F5b0988e595225.cdn.sohucs.com%2Fimages%2F20171226%2Fb877aac2da3e489bad8638c5136f5e88.jpeg";
private String highPath = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1543329113431&di=551287617c4e82f27f19f82d7af4da57&imgtype=0&src=http%3A%2F%2Fimgsrc.baidu.com%2Fimage%2Fc0%253Dshijue1%252C0%252C0%252C294%252C40%2Fsign%3D5bdd825b5b0fd9f9b41a5d2a4d44be5f%2Fd62a6059252dd42a9811ac8c093b5bb5c9eab8f9.jpg";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_multi);
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://先显示低分辨率的图,然后是高分辨率的图,Fresco就是
Uri lowUri = Uri.parse(lowPath);
Uri highUri = Uri.parse(highPath);
//控制加载的图片控制器
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() + "lz.jpg"));
break;
case R.id.bt_fresco_multiplexImg://本地图片复用
break;
}
}
}
布局文件:
<?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_multi"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_gravity="center"
android:layout_marginTop="48dp"
fresco:placeholderImage="@mipmap/ic_launcher" />
<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>
6.动态展示图片:
AutoSizeActivity
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 android.widget.LinearLayout;
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 com.facebook.imagepipeline.request.ImageRequestBuilder;
public class AutoSizeActivity extends AppCompatActivity implements View.OnClickListener {
private Button bt_fresco_loadsmall;
private LinearLayout ll_fresco_icon;
private SimpleDraweeView mSimpleDraweeView;
private String Path = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1543329113431&di=551287617c4e82f27f19f82d7af4da57&imgtype=0&src=http%3A%2F%2Fimgsrc.baidu.com%2Fimage%2Fc0%253Dshijue1%252C0%252C0%252C294%252C40%2Fsign%3D5bdd825b5b0fd9f9b41a5d2a4d44be5f%2Fd62a6059252dd42a9811ac8c093b5bb5c9eab8f9.jpg";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_auto_size);
initView();
mSimpleDraweeView = new SimpleDraweeView(this);
//设置图片的宽高比,参数如果大于1,则宽度是高度的几倍
mSimpleDraweeView.setAspectRatio(0.5f);
}
private void initView() {
bt_fresco_loadsmall = (Button) findViewById(R.id.bt_fresco_loadsmall);
ll_fresco_icon = (LinearLayout) findViewById(R.id.ll_fresco_icon);
bt_fresco_loadsmall.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_fresco_loadsmall:
//1.设置图片的地址
Uri parse = Uri.parse(Path);
//2.图片请求
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(parse).build();
//3.加载图片的控制
AbstractDraweeController build = Fresco.newDraweeControllerBuilder()
.setOldController(mSimpleDraweeView.getController())//内存优化
.setImageRequest(request)
.build();
//加载图片
mSimpleDraweeView.setController(build);
ll_fresco_icon.addView(mSimpleDraweeView);
break;
}
}
}
布局文件:
<?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">
<Button
android:id="@+id/bt_fresco_loadsmall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="加载图片" />
<LinearLayout
android:id="@+id/ll_fresco_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="vertical">
</LinearLayout>
</LinearLayout>
好了 到这里就告一段落了,稍后我会为大家持续更新,希望能给大家带来帮助,下面给大家分享一下Fresco的网址:
https://www.fresco-cn.org/