一句代码加载网络图片到ImageView——Android Picasso
2015-07-17 14:13
633 查看
在这里介绍一个Android框架:Picasso。
picasso是Square公司开源的一个Android图形缓存库,地址http://square.github.io/picasso/,可以实现图片下载和缓存功能。仅仅只需要一行代码就能完全实现图片的异步加载。代码如下:
}}
可以看到实际上加载图片的代码就一句:
这么方便的框架,相信大家对它已经开始感兴趣了。
Picasso的特点还不止这个,还有以下几个特点:
1.在adapter中需要取消已经不在视野范围的ImageView图片资源的加载,否则会导致图片错位,Picasso已经解决了这个问题。
2.使用复杂的图片压缩转换来尽可能的减少内存消耗
3.自带内存和硬盘二级缓存功能
在实际开发过程中很多时候ImageView是用在ListView之中的。那么如果Picasso不能够自动缓存图片,检测图片的重用的话那也没什么卵用。幸好~~Picasso还是有卵用的!Picasso可以自动重用,自动取消加载。看代码:
MainActivity.java
效果图就不贴出来了,有兴趣的可以复制以上代码运行一下,就会发现Picasso可以自动重用,自动取消加载。
有时候网络上的某张图片太大,放到手机上不但不合适而且费内存。我们可以使用Picasso的图片转换功能:
picasso是Square公司开源的一个Android图形缓存库,地址http://square.github.io/picasso/,可以实现图片下载和缓存功能。仅仅只需要一行代码就能完全实现图片的异步加载。代码如下:
public class MainActivity extends Activity { private ImageView imageView; private String url="http://h.hiphotos.baidu.com/image/pic/item/64380cd7912397dd6e6c3adf5c82b2b7d1a287d0.jpg"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView=(ImageView) findViewById(R.id.TestImageID); <pre name="code" class="java">Picasso.with(this).load(url).into(imageView);
}}
可以看到实际上加载图片的代码就一句:
Picasso.with(this).load(url).into(imageView);是不是很方便呢?当然大家在测试的时候还是需要加上访问网络权限的。
这么方便的框架,相信大家对它已经开始感兴趣了。
Picasso的特点还不止这个,还有以下几个特点:
1.在adapter中需要取消已经不在视野范围的ImageView图片资源的加载,否则会导致图片错位,Picasso已经解决了这个问题。
2.使用复杂的图片压缩转换来尽可能的减少内存消耗
3.自带内存和硬盘二级缓存功能
在实际开发过程中很多时候ImageView是用在ListView之中的。那么如果Picasso不能够自动缓存图片,检测图片的重用的话那也没什么卵用。幸好~~Picasso还是有卵用的!Picasso可以自动重用,自动取消加载。看代码:
MainActivity.java
public class MainActivity extends Activity { private ListView listview; private List<String> datas; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listview=(ListView) findViewById(R.id.TestListViewID); initData(); listview.setAdapter(new LoadImageAdapter(this, datas)); } private void initData(){ datas=new ArrayList<String>(); datas.add("http://h.hiphotos.baidu.com/image/pic/item/64380cd7912397dd6e6c3adf5c82b2b7d1a287d0.jpg"); datas.add("http://f.hiphotos.baidu.com/image/pic/item/5fdf8db1cb1349540cf84bbf534e9258d0094a02.jpg"); datas.add("http://f.hiphotos.baidu.com/image/pic/item/267f9e2f0708283862f47ecfbd99a9014d08f174.jpg"); datas.add("http://a.hiphotos.baidu.com/image/pic/item/8326cffc1e178a82d134df7bf303738da877e8e5.jpg"); datas.add("http://h.hiphotos.baidu.com/image/pic/item/241f95cad1c8a786d6e4e9d56209c93d71cf501a.jpg"); datas.add("http://f.hiphotos.baidu.com/image/pic/item/b8389b504fc2d562e078f91ee21190ef77c66cd4.jpg"); datas.add("http://c.hiphotos.baidu.com/image/pic/item/55e736d12f2eb938f91d5301d0628535e4dd6fd4.jpg"); } }LoadImageAdapter.java
public class LoadImageAdapter extends BaseAdapter{ private List<String> resList=new ArrayList<String>(); private Context mContext; public LoadImageAdapter(Context context,List<String> list){ resList=list; mContext=context; } @Override public int getCount() { // TODO Auto-generated method stub return resList.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return resList.get(arg0); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view=LayoutInflater.from(mContext).inflate(R.layout.listviewitem, null); ImageView imageview=(ImageView) view.findViewById(R.id.imageviewID); Picasso.with(mContext).load(getItem(position).toString()).into(imageview); return view; } }
效果图就不贴出来了,有兴趣的可以复制以上代码运行一下,就会发现Picasso可以自动重用,自动取消加载。
有时候网络上的某张图片太大,放到手机上不但不合适而且费内存。我们可以使用Picasso的图片转换功能:
Picasso.with(this).load("http://h.hiphotos.baidu.com/image/pic/item/64380cd7912397dd6e6c3adf5c82b2b7d1a287d0.jpg") .resize(100, 100).centerCrop().into(imageView);在手机上加载图片往往是需要等待一段时间才会加载完成甚至有可能会加载出错,Picasso也为我们考虑到这一点。我们可以设定在图片空白或出错的时候显示指定的图片:
Picasso.with(context) .load(url) .placeholder(R.drawable.user_placeholder) .error(R.drawable.user_placeholder_error) .into(imageView);Picasso不但能够用来加载网络图片还能够加载本地sd卡上的图片,程序资源文件。
相关文章推荐
- ListView分页+网络下载数据
- BP网络范例 MATLAB
- 图片的三级缓存策略(内存LruCache+磁盘DiskLruCache+网络Volley)
- [寒江孤叶丶的Cocos2d-x之旅_34]ODSocket(BSDSocket)如何在切换网络状态时自动重连
- 网络查看图片
- 【网络流】 ZOJ 2676 Network Wars
- HTTP与HTTPS的区别
- 挨踢(IT)脱口秀--2014年&2015上半年特别“任性”的网络流行语大盘点
- 挨踢(IT)脱口秀--2014年&2015上半年特别“任性”的网络流行语大盘点
- 挨踢(IT)脱口秀--2014年&2015上半年特别“任性”的网络流行语大盘点
- 黑马程序员——网络编程
- TCP 三次握手和四次挥手协议
- windows挂载linux网络文件系统NFS
- 关于网络中的内网IP地址和公网IP地址
- Network:UDP广播消息的测试
- 使用pb的connection对象建立TCP连接
- Dart网络编程-备忘录2.0
- lua https request 调用
- linux socket 阻塞式 TCP
- LINUX select socket编程 TCP