超棒的Glide图片加载

GitHub开源:https://github.com/bumptech/glide

超棒的工具,竟然还可以加载.gif !!Glide完全基于Picasso,沿袭了其简洁风格,并在其基础上做了大量优化与改进。


1、Glide默认的Bitmap格式是RGB_565,而Picasso默认ARGB_8888,Glide内存开销要小一半。

2、磁盘存储方面,Picasso只缓存原始图片,而Glide可以根据ImageView大小来缓存相应图片大小,这个改进使Glide速度更快。

3、Glide支持加载.gif动图,Picasso不支持。

总体来说,Glide是在Picasso基础上进行的二次开发,各方面做了不少改进,但也导致Glide的包比较大(<500k),Picasso是100k左右。

一篇两者的比较:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0327/2650.html


github介绍使用方法:

// For a simple view:
@Override public void onCreate(Bundle savedInstanceState) {...ImageView imageView = (ImageView) findViewById(R.id.my_image_view);Glide.with(this).load("http://goo.gl/gEgYUd").into(imageView);
}// For a simple image list:
@Override public View getView(int position, View recycled, ViewGroup container) {final ImageView myImageView;if (recycled == null) {myImageView = (ImageView) inflater.inflate(R.layout.my_image_view, container, false);} else {myImageView = (ImageView) recycled;}String url = myUrls.get(position);Glide.with(myFragment).load(url).centerCrop().placeholder(R.drawable.loading_spinner).crossFade().into(myImageView);return myImageView;
}

实例:在ListView中使用Glide加载.gif和.jpg:

 


在适配器Adapter的getView()中(比Universal-Image-loader简洁太多啦!):

	@Overridepublic View getView(int position,View convertView,ViewGroup parent){ViewHolder viewHolder;View view;if(convertView == null){viewHolder = new ViewHolder();view = LayoutInflater.from(getContext()).inflate(resource, null);viewHolder.imageView = (ImageView)view.findViewById(R.id.image_item);			view.setTag(viewHolder);}else{view = convertView;viewHolder = (ViewHolder)view.getTag();}String imageUrl = Urls.imageUrls[position];Glide.with(getContext()).load(imageUrl).centerCrop().crossFade().into(viewHolder.imageView);return view;}//.override(int width,int height).placeholder(R.drawable.ic_launcher).error(R.drawable.ic_launcher)class ViewHolder{ImageView imageView;}


Glide.with()

** 总结:可以传入的参数有 
*@see #with( Android .app.Activity) 
* @see #with(android.app.Fragment) 
* @see #with(android.support.v4.app.Fragment) 
* @see #with(android.support.v4.app.FragmentActivity)

centerCrop是一种裁剪技术,缩放图像,让它填充到ImageView.

crossFade(),淡入淡出效果

into(),imageView的id.


Urls.java

package sunny.example.helloglidelistview;public class Urls {final static String[] imageUrls = new String[]{"http://img.ui.cn/data/file/8/0/2/666208.gif","http://img.ui.cn/data/file/8/3/8/667838.jpg","http://img.ui.cn/data/file/9/5/9/654959.jpg","http://img.ui.cn/data/file/7/0/3/668307.jpg","http://img.ui.cn/data/file/6/0/1/663106.jpg","http://img.ui.cn/data/file/6/5/8/664856.jpg","http://img.ui.cn/data/file/0/2/2/666220.jpg","http://img.ui.cn/data/file/2/5/1/667152.gif","http://img.ui.cn/data/file/3/5/1/667153.jpg","http://img.ui.cn/data/file/8/3/8/664838.jpg"};
}
Thanks to http://www.ui.cn/


Item.java

public class Item {private String imageUrl;public Item(String imageUrl){this.imageUrl = imageUrl;}}


 

MainActivity.java

 

package sunny.example.helloglidelistview;import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.widget.ListView;
import java.util.ArrayList;public class MainActivity extends ActionBarActivity {private ListView listView;private ArrayList<Item> arrayList;private Item item;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);listView = (ListView)findViewById(R.id.listView);arrayList = new ArrayList<Item>();for(int i = 0;i < Urls.imageUrls.length;i++){item = new Item(Urls.imageUrls[i]);arrayList.add(item);}ItemAdapter adapter = new ItemAdapter(this,R.layout.image_item,arrayList);listView.setAdapter(adapter);}}

完整代码在:https://github.com/HiSunny/HelloGlideListView.git

Thanks to stromzhang

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JUnit 5符合AssertJ

JUnit 5在断言库中带来了很多改进&#xff0c;这主要归功于Java 8和Lambda Expression支持以及新断言&#xff08;如assertAll &#xff0c; assertTimeout或assertThrows 。 尽管我真的很喜欢JUnit 5&#xff0c;但我相信AssertJ在生产级单元测试中仍然是必须的&#xff0c;我…

开源GraphView的使用--数据统计

最近做室内定位需要绘出加速度传感器输出的三个方向的加速度曲线&#xff0c;找到了开源https://github.com/jjoe64/GraphView-Demos&#xff0c;省去了要重新学MatLab **。 在http://www.android-graphview.org/download--getting-started.html下载.jar包。 1、GraphView的使…

json绑定到实体_绑定到JSON和XML –处理集合

json绑定到实体EclipseLink JAXB&#xff08;MOXy&#xff09;的优势之一是能够使用单个元数据集将对象模型映射到JSON和XML。 一个弱点是您需要在JSON键或XML元素上折中集合属性。 我很高兴地说这个问题已经在EclipseLink 2.5&#xff08;和EclipseLink 2.4.2&#xff09;中解…

Java JDK 10会有什么期望

由于我们刚刚习惯于9月发布的Java 9&#xff0c;因此距离下一代Java的发布只有几个月的时间了。 就在本月&#xff0c;计划中的Java Development Kit 10升级已进入开发的主要减速阶段。 在第一个初始阶段&#xff0c;可以修复一个到三个错误。 JDK 10是Java Standard Edition …

jpa配置映射包_JPA – Hibernate –包级别的类型映射

jpa配置映射包当我们最终成熟到可以在JPA中使用某些自定义类型映射时&#xff0c;我们通常会停留在某些提供程序特定的解决方案上&#xff0c;因为JPA本身并未定义任何用于执行此操作的机制。 让我为您展示一个JPA提供程序Hibernate的自定义类型映射定义的示例。 假设我们在项目…

弹簧和线程:异步

以前&#xff0c;我们开始使用spring和TaskExecutor &#xff0c;因此我们对如何在spring应用程序中使用线程更加熟悉。 但是&#xff0c;使用任务执行程序可能比较麻烦&#xff0c;尤其是当我们需要执行简单的操作时。 Spring的异步方法可以解决。 您不必为可运行对象和Tas…

C++一天一个程序(一)

例1: helloworld! #include int main() { std::cout << “Hello, world!n”; } 或者 #include using namespaces std; int main() { cout << “Hello, world!n”; } 换行还可以endl

我的对象命名

这是最常见的辩论之一。 大多数人对此主题有自己的见解&#xff0c;却没人能真正说出哪个是正确的。 我当然不能&#xff0c;但是尽管如此&#xff0c;我还是决定与大家分享我的想法&#xff0c;投入两美分&#xff0c;也许对某人会有帮助。 当我创建一个新类时&#xff0c;我…

C++一天一个程序(二)

#include #define NUMBER 4 int main() { std::cout << NUMBER << std::endl; } 或者 #include using namespaces std; int main() { cout << 4<< endl; } 注意: 第一段中NUMBER已经被定义&#xff0c;不可以在程序中再次赋值。建议不要用#define定义…

c++编写web服务_让我们编写一个文档样式的Web服务

c编写web服务您可能知道&#xff0c;我们可以使用四种主要的Web服务样式。 它们如下&#xff1a; 文件/文学 包装的文件/文学 RPC /编码 RPC /文字 当然&#xff0c;现在不建议使用RPC /编码样式。 如果您有兴趣&#xff0c;可以在此处找到这篇非常全面的文章&#xff0c;…

C++一天一个程序(三)

#include <stdio.h> class Trace { public:     Trace()  {noisy 0; }      void print(char* s)  { if (noisy)  printf("%s",s); }   void on()  { noisy 1; }      void off()   { noisy 0; }  private: int noisy;   };  C改…

Java 9:ServiceLoader

java.util.ServiceLoader类在运行时加载服务提供者/实现。 在编译时&#xff0c;ServiceLoader只需要知道Service接口。 借助Java9模块化&#xff0c;我们可以在运行时动态添加服务实现模块&#xff0c;而Application可以拥有新的实现&#xff0c;而不会影响任何事情&#xff0…

C++一天一个程序(四)

#include using namespace std; struct complex{  double real, imag;  complex(double 0.0, double 0.0); } complex&#xff1a;complex(double r, double i) {  real r; imag i; } inline ostream& operator<<(ostream &os, const complex &c) {…

C++一天一个程序(五)

(1)确定所求长方形的长和宽。 (2)确定计算长方形的周长和面积的公式并计算。 (3)输出计算结果。 (1)以面向过程程序设计思想编码。 #include using namespace std; void main(){ int perimeter,area; int length20,width10; perimeter2*(lengthwidth); arealength* width; cou…

netbeans 定制代码_将NetBeans代码模板弯曲到我的意愿

netbeans 定制代码任何阅读过我关于NetBeans的文章的人都知道&#xff0c;我真的很喜欢NetBeans的许多功能。 但是&#xff0c;最近&#xff0c;我发现自己对NetBeans特定功能的特定问题越来越恼火。 最终&#xff0c;它使我烦恼不已&#xff0c;促使我开始研究如何根据自己的喜…

一天一个C++程序(六)

数据类型转换应用示例。 #include using namespace std; int main() { int a,c,d,b322; float x,z,y4.56; char ch1‘d’,ch2; ay; xb; cch1; ch2b; zyb; dbch1; cout<<“a”<<a<<"\tx"<<x<<endl; cout<<“c”<<c<<…

早期更多失败– Java 8

快速失败或早期失败是一种软件工程概念&#xff0c;旨在通过在不应该发生的事情发生时立即停止执行来防止复杂问题的发生。 在之前的博客文章和演示中&#xff0c;我将详细介绍这种方法的优点&#xff0c;在此博客文章中&#xff0c;我将详细介绍Java 8中该思想的另一种用法。 …

C++一天一个程序(七)

#include using namespace std; int main() { cout<<“字符型 (char)所占字节数:”<<sizeof(char)<<endl; cout<<“无符号字符型(unsigned char)所占字节数:”<<sizeof( unsigned char)<<endl; cout<<“短整型( short int)所占字节数…

C++一天一个程序(八)

#include <iostream.h> void main() { int i,j,k; for(i1;i<6;i) { for(j1:j<6-i;j) cout<<" “; for(kl;k<: 2i- 1;k) cout<<"%"; cout<<endl; } for(i5;i>1;–) { for(j 1:j<6-i:j) cout<<" "; for(k…

url中传递对象参数_在URL参数中传递复杂对象

url中传递对象参数假设您想传递原始数据类型&#xff0c;例如复杂的Java对象 java.util.Data&#xff0c;java.lang.List&#xff0c;泛型类&#xff0c;数组以及通过URL参数所需的所有内容&#xff0c;以便在页面加载后在任何网页上预设默认值。 共同的任务&#xff1f; 是的…