android使用第三方框架fresco展示网络图片
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android使用第三方框架fresco展示网络图片相关的知识,希望对你有一定的参考价值。
资源:https://github.com/facebook/fresco](https://github.com/facebook/fresco
01:优点和不足:
加载的图片多时,推荐使用,比如ListView条目中的图片.
02:添加依赖库:在app/build.gradle中添加如下代码,点击同步:
compile ‘com.facebook.fresco:fresco:0.9.0+‘
03.布局:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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" tools:context="www.itcast.com.testfresco.MainActivity"> <!--宽高一定要写死-->
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/iv"
android:layout_width="200dp"
android:layout_height="200dp"
fresco:placeholderImage="@mipmap/ic_launcher" />
<Button android:id="@+id/btn" android:layout_centerInParent="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="fresco展示网络图片" /> </RelativeLayout>
04.访问网络当然添加权限必不可少:
<uses-permission android:name="android.permission.INTERNET" />
05.初始化要注意:
在Application初始化或在Activity 的setContentView()方法之前,进行初始化 Fresco.initialize(this);
06:核心代码:
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private SimpleDraweeView iv; private Button btn; private String NET_URI="http://img4.duitang.com/uploads/item/201412/11/20141211152834_eAfSi.jpeg"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //初始化的位置 Fresco.initialize(this); setContentView(R.layout.activity_main); initView(); } private void initView() { iv = (SimpleDraweeView) findViewById(R.id.iv); btn = (Button) findViewById(R.id.btn); btn.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn: Uri uri=Uri.parse(NET_URI); iv.setImageURI(uri); break; } } }
07:图片特殊显示参数:
fresco:actualImageScaleType="focusCrop"// 图片的缩放方式. fresco:backgroundImage="@color/blue" //背景图.不支持缩放.XML仅能指定一张背景图.如果使用Java代码指定的话,可以指定多个背景,显示方式类似FrameLayout,多个背景图按照顺序一级一级层叠上去. fresco:fadeDuration="300" // 渐显图片的时间 fresco:failureImage="@drawable/error" // 图片加载失败显示的图片 fresco:failureImageScaleType="centerInside" //// 图片加载失败显示的图片的缩放类型 fresco:overlayImage="@drawable/watermark" // 层叠图,最后叠加在图片之上.不支持缩放.XML仅能指定一张.如果使用Java代码指定的话,可以指定多个,显示方式类似FrameLayout,多个图按照顺序一级一级层叠上去. fresco:placeholderImage="@color/wait_color" // 图片加载成功之前显示的占位图 fresco:placeholderImageScaleType="fitCenter" // 图片加载成功之前显示的占位图的缩放类型 fresco:pressedStateOverlayImage="@color/red" // 设置按压状态下的层叠图.不支持缩放. fresco:progressBarAutoRotateInterval="1000" // 进度条图片旋转显示时长 fresco:progressBarImage="@drawable/progress_bar" // 进度条图片 fresco:progressBarImageScaleType="centerInside" //进度条图片的缩放类型 fresco:retryImage="@drawable/retrying" // 当图片加载失败的时候,显示该图片提示用户点击重新加载图片 fresco:retryImageScaleType="centerCrop" // 提示图片的缩放类型 fresco:roundAsCircle="false" // 显示圆形图片 fresco:roundBottomLeft="false" // roundedCornerRadius属性设置后,四个角都会有圆角,如果左下角不需要设置为false. fresco:roundBottomRight="true" // roundedCornerRadius属性设置后,四个角都会有圆角,如果右下角不需要设置为false. fresco:roundTopLeft="true" // roundedCornerRadius属性设置后,四个角都会有圆角,如果左上角不需要设置为false. fresco:roundTopRight="false" // roundedCornerRadius属性设置后,四个角都会有圆角,如果右上角不需要设置为false. fresco:roundWithOverlayColor="@color/corner_color" // 设置图片圆角后空出区域的颜色.如示例图中的红色部分 fresco:roundedCornerRadius="1dp" // 设置图片圆角角度,设置该属性后四个角都会生效 fresco:roundingBorderColor="@color/border_color" // 设置圆角后,边框的颜色. fresco:roundingBorderWidth="2dp" /> // 设置圆角后,外边框的宽高
08.图片特殊显示java代码:
GenericDraweeHierarchy hierarchy = GenericDraweeHierarchyBuilder .newInstance(getResources()) .setRetryImage(getResources().getDrawable(R.mipmap.ic_launcher)) .build(); imageivew.setHierarchy(hierarchy);
09.渐进式显示图片(下载多少就显示多少,没下载完之前是模糊的):
/*渐进式显示图片 ProgressiveJpegConfig pjpegConfig = new ProgressiveJpegConfig() { @Override // 返回下一个需要解码的扫描次数 public int getNextScanNumberToDecode(int scanNumber) { return scanNumber + 2; } // 确定多少个扫描次数之后的图片才能开始显示 public QualityInfo getQualityInfo(int scanNumber) { boolean isGoodEnough = (scanNumber >= 5); return ImmutableQualityInfo.of(scanNumber, isGoodEnough, false); } }; // ImagePipelineConfig配置如何加载图像 ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this) .setProgressiveJpegConfig(pjpegConfig) .build(); // 显式地指定允许渐进式JPEG图片加载 ImageRequest request = ImageRequestBuilder .newBuilderWithSource(uri) .setProgressiveRenderingEnabled(true) .build(); // 构建显示图片所用到的DraweeController DraweeController controller = Fresco.newDraweeControllerBuilder() .setImageRequest(request) .setOldController(iv.getController()) .build(); iv.setController(controller); */
10.显示Gif图片:
/*显示GIF图片.Fresco 支持 GIF 和 WebP 格式的动画图片.如果你希望图片下载完之后自动播放,同时,当View从屏幕移除时,停止播放,只需要在 image request 中简单设置 Uri urlGif = Uri.parse("http://img0.imgtn.bdimg.com/it/u=4040253614,2927360696&fm=21&gp=0.jpg"); DraweeController controller = Fresco.newDraweeControllerBuilder() .setUri(urlGif) .setAutoPlayAnimations(true) .build(); iv.setController(controller); */
11:代码资源:
http://download.csdn.net/detail/tom91/9631011
以上是关于android使用第三方框架fresco展示网络图片的主要内容,如果未能解决你的问题,请参考以下文章
[Android开源]一套快速高效的开发框架EasyAndroid