关于图片加载非常爽的一个三方控件 fresco

Hi  EveryBody 今天来玩一个非常爽的控件 fresco 到底有多爽呢

接着看就知道了

首先 来看看fresco 是个神马东西

https://github.com/facebook/fresco 这个是fresco的一个官方gifhub 官网为http://frescolib.org/

这个网站是个英文站点 对英文不太精通的童鞋也没关系啦 因为这就是一个图片加载库 我们说传统的加载库

从自己写一个BitMap类的工具 到软引用 到ImageLoader这些无非是解决一个oom问题 但是有个问题

它们都不能去动态的加载 或者说加载一些gif 或者说 给图片描边 通常做法一般都是写一个自定义的roundImage

然后再去XXX 或者利用类似GifImageView 或者RounndeImageView这样的库 库加库毕竟你的工程会越来越臃肿

但是fresco解决了我们以前的这些烦恼 还有一点就是我们在进行网络加载 特别是以前网速很慢的时候发现图片都不是一下就

加载出来的 而需要一点点的循序渐进 这个在过去的插件上很少有做到的 而fresco就可以 真正的实现了边加边看的需求

满足了大多数强迫症(像我这种)人的需求。

来玩一下fresco 我们去看官方向导

http://frescolib.org/docs/index.html

1 注册你的清单文件 加一个访问网络的权限

http://frescolib.org/docs/index.html 这个没什么好说的 加一个就行了

2 因为fresco需要一个初始化过程 所以就需要调用初始化方法

Fresco.initialize(context);

当然 如果你是直接在actvity里面 写成

Fresco.initialize(this); 也无可厚非

这个时候 有人可能会问 我的工程里面并没有fresco这个类

这个官方的github上为我们提供了导入的 方法

由于我用的是studio 所以鉴于gradle工程来说这个就很简单了

只需要在build.gradle上面加一行代码

compile ‘com.facebook.fresco:fresco:0.1.0+‘

这样就可以了 你可以看到 这个库还在一个很新的版本上 所以未来这东西的前途不可限量

这里需要使用代理 不然你的工程可能无法下载这个库

3 搞定好了之后 加一个布局文件 和一个自定义的view就可以用了

看下代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_centerHorizontal="true"
        android:id="@+id/title"
        android:text="fresco pic" android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:textColor="#000000"
        />
    <LinearLayout
        android:layout_below="@id/title"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center_horizontal"
        android:background="#649FEF"
        >
    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/frsco_img1"
        android:layout_width="200dp"
        android:layout_height="0dp"
        android:layout_weight="1"
        fresco:roundedCornerRadius="5dp"
        fresco:roundBottomLeft="false"
        fresco:roundBottomRight="false"
        fresco:roundWithOverlayColor="#333333"
        fresco:roundingBorderWidth="1dp"
        fresco:roundingBorderColor="#222222"
        />
    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/frsco_img2"
        android:layout_width="200dp"
        android:layout_height="0dp"
        android:layout_weight="1"
        fresco:roundedCornerRadius="5dp"
        fresco:roundBottomLeft="false"
        fresco:roundBottomRight="false"
        fresco:roundWithOverlayColor="#333333"
        fresco:roundingBorderWidth="10dp"
        fresco:roundingBorderColor="#33CC5B"
        android:layout_centerHorizontal="true"
        />
    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/frsco_img3"
        android:layout_width="200dp"
        android:layout_height="0dp"
        android:layout_weight="1"
        fresco:roundedCornerRadius="5dp"
        fresco:roundBottomLeft="false"
        fresco:roundBottomRight="false"
        fresco:roundWithOverlayColor="#F0E511"
        fresco:roundingBorderWidth="5dp"
        fresco:roundingBorderColor="#FC6853"
        android:layout_centerHorizontal="true"
        />
    </LinearLayout>
</RelativeLayout>

这里为了方便演示 加了三个这样的SimpleDraweeView

然后就是一个namespace 这样就可以用一些fresco给你的一些属性

比如这个

fresco:roundWithOverlayColor="#333333"

设置你覆盖物的颜色 其他还有很多 这个有兴趣的可以自己试试

一切搞定 看下代码吧

public class MainActivity extends Activity implements View.OnTouchListener {

    private SimpleDraweeView mSimpleDraweeView;
    private SimpleDraweeView mSimpleDraweeView2;
    private SimpleDraweeView mSimpleDraweeView3;
    private String imageUri1 = "http://img.ptcms.csdn.net/article/201503/30/5519091be9a85_middle.jpg?_=30474";
    private String imageUri2 = "http://ww1.sinaimg.cn/mw600/6345d84ejw1dvxp9dioykg.gif";
    private String imageUri3 = "http://p5.qhimg.com/t01d0e0384b952ed7e8.gif";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Fresco.initialize(this);
        setContentView(R.layout.activity_main);
        setImage();
    }

    /**
     * 设置自动播放图片 三张
     */
    private void setImage() {
        Uri uri = Uri.parse(imageUri1);
        Uri uri2 = Uri.parse(imageUri2);
        Uri uri3 = Uri.parse(imageUri3);
        mSimpleDraweeView = (SimpleDraweeView) findViewById(R.id.frsco_img1);

        DraweeController  draweeController1 = Fresco.newDraweeControllerBuilder().setUri(uri).setAutoPlayAnimations(true).build();
        mSimpleDraweeView.setController(draweeController1);
        mSimpleDraweeView.setOnTouchListener(this);
//      Uri uri2 = Uri.parse(imageUri2);
        DraweeController  draweeController2 = Fresco.newDraweeControllerBuilder().setUri(uri2).setAutoPlayAnimations(true).build();
        mSimpleDraweeView2 = (SimpleDraweeView) findViewById(R.id.frsco_img2);
        mSimpleDraweeView2.setController(draweeController2);
        RoundingParams mRoundParams2 =  mSimpleDraweeView2.getHierarchy().getRoundingParams();
        mRoundParams2.setRoundAsCircle(true);
        mSimpleDraweeView2.getHierarchy().setRoundingParams(mRoundParams2);
        DraweeController  draweeController3 = Fresco.newDraweeControllerBuilder().setUri(uri3).setAutoPlayAnimations(true).build();
        mSimpleDraweeView3 = (SimpleDraweeView) findViewById(R.id.frsco_img3);
        mSimpleDraweeView3.setController(draweeController3);
        RoundingParams mRoundParams3 =  mSimpleDraweeView3.getHierarchy().getRoundingParams();
        mRoundParams3.setRoundAsCircle(true);
        mSimpleDraweeView3.getHierarchy().setRoundingParams(mRoundParams3);
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                mSimpleDraweeView.setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY);
                return true;
//                break;
            case MotionEvent.ACTION_UP:
                mSimpleDraweeView.clearColorFilter();
                return true;
//                break;
        }
        return super.onTouchEvent(event);
    }

}

这里代码是这样

1我们用一张静态图 首先找到这个控件 然后用Uri这个类 去封装一个相应的链接

2 DraweeController这个类的作用是可以动态去播放你的gif 或者一些动态图 当然它里面还有监听 我没有加

3 使用圆形图的话 需要用的Facebook给我们的 RoundParmas 这个类

而这个类的获得方法 上面已经写的很清楚了

看下效果图

OK 这次就这么多 各位下次再会啦

时间: 2024-10-08 20:46:07

关于图片加载非常爽的一个三方控件 fresco的相关文章

web页面动态加载UserControl,并调用用户控件中的方法来初始化控件

1,HTML页 头部注册: <%@ Register Src="~/WorkLog/WorkLogNewV1/UserControl/CeShiBu.ascx" TagPrefix="UserControl" TagName="CeShiBu"%> <%@ Register Src="~/WorkLog/WorkLogNewV1/UserControl/KaiFaBu.ascx" TagPrefix=&quo

快速加载DXF、DWG格式文件控件ABViewer

ABViewer是一种高品质,低成本,高效率的多功能设计及工程文档管理应用程序. ABViewer为您提供专业的cad文件浏览和编辑工具. 支持多种格式,如:DWG格式, DXF, DWF, Hewlett-Packard HPGL, PLT, HGL, CGM, SVG, TIFF, BMP, JPG, GIF etc 等. 具体功能: ABViewer它可以方便我们在下述几种情况下大大节省时间: 当您需要在您的MS Word 文档中导入CAD图像时 您可以获得比常规软件快两倍的CAD文件(D

主流图片加载框架ImageLoader、Glide、Picasso、Fresco性能分析---图片加载速度比较

图片加载这种实现繁琐,可复用性又极强的东西,自然是选择使用图片加载框架来快速实现. 像是Android-Universal-Image-Loader.Glide.Picasso.Fresco之类, 但是这时候的烦恼在于,这么多图片加载框架到底谁最实用? 有说Fresco,因为支持WebP,还是用了NDK来加载图片,减少JavaHeap的使用 有Picasso,简洁高效 有说Glide,Picasso升级,可以加载Gif,在Picasso基础上扩展了很多方法 ImageLoader 使用最广,因为

【Android界面实现】ZListView,一个最强大的刷新、加载、滑动删除的ListView控件(二)

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 我们接着上篇的文章说,在前一篇文章中,我们学习了ZListView的使用,这一篇就开始说一些干货了,本篇文章将介绍ZListView的实现原理. 其实说是ZListView的实现原理,不如说是ZSwipeItem的实现原理,因为ZSwipeItem才是滑动的关键所在. ZSwipeItem的滑动,主要是通过ViewDragHelper这个类实现的.在接触这个项目之前,我没听过,也从来碰到过这个类,View

volley中图片加载

volley图片加载有三种方式: 1. ImageRequest 1 singleImg=(ImageView)findViewById(R.id.volley_img_single_imgeview); 2 ImageRequest imgRequest=new ImageRequest(url, new Response.Listener<Bitmap>() { 3 @Override 4 public void onResponse(Bitmap arg0) { 5 // TODO Au

Android开发之搜芽项目的图片加载问题(使用Volley进行网络图片加载)

搜芽的移动开发这几天进度相对来说非常的快.但是美中不足的就是网络图片的加载问题.我有两套方案: 1)沿用迅雷动漫的图片加载.迅雷动漫也是用的一个开源的库.但是不知道是我使用出了问题还是真的是它的问题.在我迅速的下拉和回倒的时候, 不确定的会出现崩溃.logcat显示loadImage里面出现了内存溢出.out of memory..这个我想应该不是我的问题. 2)采用外包的AsyncImageLoader.这个文件我没有仔细看.然后实验结果是,加载图片巨慢.而且容易导致卡顿. 所以,我将希望转向

常用图片加载框架

我们在项目中使用的是Picasso.其实现在的主流图片加载框架除了Picasso还有ImageLoader,Glide,以及Fresco.ImageLoader是比较老的框架了,稳定, 加载速度适中, 缺点在于不支持GIF图片加载, 使用稍微繁琐, 并且缓存机制没有和http的缓存很好的结合, 完全是自己的一套缓存机制.Glide是谷歌的一位工程师开发的,它可以说是Picasso的升级版, 有Picasso的优点, 并且支持GIF图片加载显示, 图片缓存也会自动缩放, 默认使用RGB_565格式

一起写一个Android图片加载框架

本文会从内部原理到具体实现来详细介绍如何开发一个简洁而实用的Android图片加载缓存框架,并在内存占用与加载图片所需时间这两个方面与主流图片加载框架之一Universal Image Loader做出比较,来帮助我们量化这个框架的性能.通过开发这个框架,我们可以进一步深入了解Android中的Bitmap操作.LruCache.LruDiskCache,让我们以后与Bitmap打交道能够更加得心应手.若对Bitmap的大小计算及inSampleSize计算还不太熟悉,请参考这里:高效加载Bit

javascript图片加载---加载大图的一个解决方案

网页在加载一张大图片时,往往要加载很久: 而且,在加载过程中,无法很好地控制图片的样式,容易造成错位等显示错误: 如果能够在加载大图时,先使用一张较小的loading图片占位,然后后台加载大图片,当大图片加载完成后,自动替换占位图, 这样能提供更好的用户体验: 由于,我在开发一个图片查看器时,遇到这样的需求,所以我写了个angular服务,来解决这个问题,效果还不错: 虽然是angular服务,当是把里面核心代码抽出来也可以单独使用: 来分享下源代码: 一: var imgloader = ne