例:
主方法类:MainActivity :
主方法一类:Main1Activity 【进度条;圆角;圆形】
主方法儿二类:Main2Activity【请求GIT;播放;停止】
主方法三类Main3Activity 【先低分辨率,后高分辨率;渐变图片】
依赖:
dependencies { compile 'com.facebook.fresco:fresco:0.12.0'//图片加载框架fresco库开始 compile 'com.facebook.fresco:animated-gif:0.12.0'// 支持Gif图片,需加入 compile 'com.facebook.fresco:animated-webp:0.12.0'// 支持webP图片的动态图,需加入 compile 'com.facebook.fresco:webpsupport:0.12.0' // 支持webP图片的静态图,需加入 compile 'com.facebook.fresco:animated-base-support:0.12.0'// 在API < 14的系统如也要支持 webP图片的话加入 }
权限:
<uses-permission android:name="android.permission.INTERNET"/>
MyApplication类:
(<application/>在这个控件里加入属性:android:name=".MyApplication")
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); } }
主方法类:MainActivity
public class MainActivity extends AppCompatActivity implements View.OnClickListener { //封装全局变量(成员变量) private Button btn01; private Button btn02; private Button btn03; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //找控件 btn01 = findViewById(R.id.btn01); btn02 = findViewById(R.id.btn02); btn03 = findViewById(R.id.btn03); //点击监听事件 btn01.setOnClickListener(this); btn02.setOnClickListener(this); btn03.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.btn01: Intent intent1 = new Intent(MainActivity.this,Main1Activity.class); startActivity(intent1); break; case R.id.btn02: Intent intent2 = new Intent(MainActivity.this,Main2Activity.class); startActivity(intent2); break; case R.id.btn03: Intent intent3 = new Intent(MainActivity.this,Main3Activity.class); startActivity(intent3); break; } } }
activity_main 布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="vertical" 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:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/btn01" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:text="进度条;圆角;圆形" /> <Button android:id="@+id/btn02" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:text="请求GIT;播放;停止" /> <Button android:id="@+id/btn03" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:text="先低分辨率,后高分辨率;渐变图片" /> </LinearLayout>
点击跳转按钮:
添加权限:
<application>在这个控件中加入参数(需要跳转的页面)
<activity android:name=".Main1Activity"/>
<activity android:name=".Main2Activity"/>
<activity android:name=".Main3Activity"/>
</application>
主方法一类:Main1Activity 【进度条;圆角;圆形】
public class Main1Activity extends AppCompatActivity { private SimpleDraweeView my_image_view; private Button btn_jingdutiao; private Button btn_yuanjiao; private Button btn_yuanxing; private Uri uri; private GenericDraweeHierarchyBuilder builder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main1); //所要加载图片的网址 uri = Uri.parse("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1528278912215&di=11d1dbed991817f097e5c2b331ca5b18&imgtype=0&src=http%3A%2F%2Fold.bz55.com%2Fuploads%2Fallimg%2F150210%2F139-150210134411-50.jpg"); my_image_view = findViewById(R.id.my_image_view); btn_jingdutiao = findViewById(R.id.btn_jingdutiao); btn_yuanjiao = findViewById(R.id.btn_yuanjiao); btn_yuanxing = findViewById(R.id.btn_yuanxing); jindutiao(); yuanjiao(); yuanxing(); } //进度条 private void jindutiao() { btn_jingdutiao.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //创建Builder对象,一般创建出参数对象 builder = new GenericDraweeHierarchyBuilder(getResources()); //创建参数对象,设置其样式为进度条 GenericDraweeHierarchy hierarchy = builder.setProgressBarImage(new ProgressBarDrawable()).build(); //将参数对象设置给图片控件 my_image_view.setHierarchy(hierarchy); //控件加载图片,参数:网络图片的网址. my_image_view.setImageURI(uri); } }); } //圆角 private void yuanjiao() { btn_yuanjiao.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 设置圆角图片 //设置边角的弧度,使其为圆角 RoundingParams parames =RoundingParams.fromCornersRadius(50f); /* //设置图片控件的背景颜色 parames.setOverlayColor(getResources().getColor(android.R.color.holo_red_light));//覆盖层 //设置图片的边框颜色及边框的粗细 parames.setBorder(getResources().getColor(android.R.color.holo_blue_light),5);//边框*/ //这里的代码和设置圆形图片这一块代码是一种的,唯一不同就是对parames的设置. GenericDraweeHierarchy circularBead = builder.setRoundingParams(parames).build(); my_image_view.setHierarchy(circularBead); // 加载图片 my_image_view.setImageURI(uri); } }); } //圆形 private void yuanxing() { btn_yuanxing.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //builder对象用一个即可,在这里创建出成员变量 builder = new GenericDraweeHierarchyBuilder(getResources()); // 设置圆形图片 // 设置形状对象,形状为圆形 RoundingParams parames = RoundingParams.asCircle(); //创建设置参数,设置一个形状,把形状对象塞入 GenericDraweeHierarchy roundness= builder.setRoundingParams(parames).build(); //将参数对象设置给图片控件 my_image_view.setHierarchy(roundness); //控件加载图片 my_image_view.setImageURI(uri); } }); } }activity_main1 布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="vertical" 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" tools:context=".Main1Activity" xmlns:fresco="http://schemas.android.com/apk/res-auto"> <com.facebook.drawee.view.SimpleDraweeView android:layout_gravity="center_horizontal" android:id="@+id/my_image_view" android:layout_width="450dp" android:layout_height="500dp" fresco:placeholderImage="@drawable/pp" /> <Button android:id="@+id/btn_jingdutiao" android:layout_gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="进度条" /> <Button android:id="@+id/btn_yuanjiao" android:layout_gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="圆角" /> <Button android:id="@+id/btn_yuanxing" android:layout_gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="圆形" /> </LinearLayout>
主方法儿二类:Main2Activity【请求GIT;播放;停止】
public class Main2Activity extends AppCompatActivity { private SimpleDraweeView sdv_fresco_gif; private View btn_qingqiu; private View btn_bofang; private View btn_tingzhi; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); //找控件 sdv_fresco_gif = findViewById(R.id.sdv_fresco_gif); btn_qingqiu = findViewById(R.id.btn_qingqiu); btn_bofang = findViewById(R.id.btn_bofang); btn_tingzhi = findViewById(R.id.btn_tingzhi); qingqiu(); bofang(); tingzhi(); } //请求GIF动画 private void qingqiu() { btn_qingqiu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //请求GIF动画,采用MVC的设计模式(注意加载GIF动画还要添加依赖) /* 支持 GIF 动图,需要添加:compile 'com.facebook.fresco:animated-gif:0.14.1' */ //GIF动画网址,加载需要一段时间 Uri uri = Uri.parse("http://p1.so.qhmsg.com/bdr/_240_/t0179d442a840b6df46.gif"); DraweeController controller =Fresco.newDraweeControllerBuilder() .setUri(uri)//设置GIF网址 .setAutoPlayAnimations(false)//是否自动播放动画,false为不播放 .setOldController(sdv_fresco_gif.getController())//内存优化 .build(); sdv_fresco_gif.setController(controller); } }); } // 播放 private void bofang() { btn_bofang.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 动画开始 //拿到动画对象 Animatable animatableStart = sdv_fresco_gif.getController().getAnimatable(); //进行非空及是否动画在播放判断 if(animatableStart != null &&!animatableStart.isRunning()) { //动画停止播放,播放动画 animatableStart.start(); } } }); } // 动画停止 private void tingzhi() { btn_tingzhi.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 动画停止 //拿到动画对象 Animatable animatableStop = sdv_fresco_gif.getController().getAnimatable(); //进行非空及是否动画在播放判断 if(animatableStop != null &&animatableStop.isRunning()) { //动画在播放,停止动画播放 animatableStop.stop(); } } }); } }
activity_main2
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="vertical" 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" tools:context=".Main2Activity" xmlns:fresco="http://schemas.android.com/apk/res-auto"> <com.facebook.drawee.view.SimpleDraweeView android:layout_gravity="center_horizontal" android:id="@+id/sdv_fresco_gif" android:layout_width="450dp" android:layout_height="500dp" fresco:placeholderImage="@drawable/pp" /> <Button android:id="@+id/btn_qingqiu" android:layout_gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="请求GIT" /> <Button android:id="@+id/btn_bofang" android:layout_gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="播放" /> <Button android:id="@+id/btn_tingzhi" android:layout_gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="停止" /> </LinearLayout>
主方法三类Main3Activity 【先低分辨率,后高分辨率;渐变图片】
public class Main3Activity extends AppCompatActivity { private SimpleDraweeView my_image_view; private Button btn_gaodi; private Button btn_jianbian; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main3); //找控件 my_image_view = findViewById(R.id.my_image_view); btn_gaodi = findViewById(R.id.btn_gaodi); btn_jianbian = findViewById(R.id.btn_jianbian); gaodi(); jianbian(); } private void gaodi() { btn_gaodi.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //多图请求及图片复用 // 先显示低分辨率的图,然后是高分辨率的图,MVC的设计模式 // 同一个图片,不同分辨率的两个URL地址 Uri lowUri = Uri.parse("http://img3.imgtn.bdimg.com/it/u=4045410176,95411995&fm=27&gp=0.jpg"); Uri highUri = Uri.parse("http://img.1985t.com/uploads/attaches/2017/12/141013-eSnS9sO.jpg"); // 控制加载图片 DraweeController controller =Fresco.newDraweeControllerBuilder() //一开始加载一个低分辨率的URL .setLowResImageRequest(ImageRequest.fromUri(lowUri)) //然后加载一个高分辨率的URL,你真正要加载的图片 .setImageRequest(ImageRequest.fromUri(highUri)) .build(); // 加载图片 my_image_view.setController(controller); } }); } private void jianbian() { btn_jianbian.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 获取图片URL Uri uri = Uri.parse("http://img1.yulin520.com/news/8OIFWKCGZFR0O868X20V.jpg#586_616"); // 加载质量配置,为了实现节省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(Main3Activity.this).setProgressiveJpegConfig(jpegConfig).build(); // 创建 ImageRequest 对象. ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)//设置URL .setProgressiveRenderingEnabled(true)//打开渐进渲染 .build(); DraweeController draweeController =Fresco.newDraweeControllerBuilder() //必须要设置ImageRequest对象,里面包含了图片的网址. .setImageRequest(request) //开启用户点击重新加载图片的功能 .setTapToRetryEnabled(true) //会复用以前的对象,可以节省内存. .setOldController(my_image_view.getController()) .build(); // 1设置加载的控制 my_image_view.setController(draweeController); } }); } }activity_main1
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="vertical" 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" tools:context=".Main3Activity" xmlns:fresco="http://schemas.android.com/apk/res-auto"> <com.facebook.drawee.view.SimpleDraweeView android:layout_gravity="center_horizontal" android:id="@+id/my_image_view" android:layout_width="450dp" android:layout_height="500dp" fresco:placeholderImage="@drawable/pp" /> <Button android:id="@+id/btn_gaodi" android:layout_gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="先低分辨率,后高分辨率" /> <Button android:id="@+id/btn_jianbian" android:layout_gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="渐变图片" /> </LinearLayout>