简介:

Picasso是Square公司开源的一个Android图形缓存库。可以实现图片下载和缓存功能。


特点:

1.加载载网络或本地图片并自动缓存处理;

2.链式调用;

3.图形转换操作,如变换大小,旋转等,提供了接口来让用户可以自定义转换操作;

4.在Adapter中回收和取消当前的下载功能;


与Universal-ImageLoader库对比:

1.都有高效的网络图片下载和缓存性能;
2.Universal-ImageLoader功能多,灵活使用配置;
3.Picasso使用复杂的图片压缩转换来尽可能的减少内存消耗;
4.在Adapter中需要取消已经不在视野范围的ImageView图片资源的加载,否则会导致图片错位,Picasso已经解决了这个问题;


用法:

1.图片转换:转换图片以适应布局大小并减少内存占用
Picasso.with(context).load(url).resize(50, 50) .centerCrop() .into(imageView);
2.Adapter 中的下载:Adapter的重用会被自动检测到,Picasso会取消上次的加载;
3.空白或者错误占位图片设置方法及本地资源文件的加载方法;

4.Picasso采用链式调用加载和处理图片方式;

5.除了加载网络图片,picasso还支持加载Resources, assets, files, content providers中的本地资源文件;


下面实现一个ListView显示网络图片:

这里找了四张网络菜谱图片,在代码中新添加一个菜类:

//表示菜类(经过烹调的蔬菜、蛋品、肉类等)public class Dish {private String imgUrl; // 图片地址private String name; // 菜名private String price; // 菜价public Dish(String imgUrl, String name, String price) {this.imgUrl = imgUrl;this.name = name;this.price = price;}public String getImgUrl() {return imgUrl;}public void setImgUrl(String imgUrl) {this.imgUrl = imgUrl;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPrice() {return price;}public void setPrice(String price) {this.price = price;}}

主界面类中,调用load方法加载网络图片,调用into方法将图片设置给ImageView之类的组件:

import java.util.ArrayList;import android.app.Activity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;import com.squareup.picasso.Picasso;public class MainActivity extends Activity {private static final String BASE_URL = "http://img1.3lian.com/img2011/w1/106/85/";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ArrayList<Dish> dishList = new ArrayList<Dish>();dishList.add(new Dish(BASE_URL + "42.jpg", "水煮鱼片", "38.00"));dishList.add(new Dish(BASE_URL + "34.jpg", "小炒肉", "18.00"));dishList.add(new Dish(BASE_URL + "37.jpg", "清炒时蔬", "15.00"));dishList.add(new Dish(BASE_URL + "11.jpg", "金牌烤鸭", "36.00"));dishList.add(new Dish(BASE_URL + "12.jpg", "粉丝肉煲", "20.00"));ListView mListView = (ListView) this.findViewById(R.id.listview);MainListViewAdapter adapter = new MainListViewAdapter(dishList);mListView.setAdapter(adapter);}// ListView适配器private class MainListViewAdapter extends BaseAdapter {private ArrayList<Dish> dishList;public MainListViewAdapter(ArrayList<Dish> list) {this.dishList = list;}@Overridepublic int getCount() {return dishList.size();}@Overridepublic Object getItem(int position) {return dishList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ListViewItemHolder item = null;if (convertView == null) {convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.main_listview_item, null);item = new ListViewItemHolder();item.img_iv = (ImageView) convertView.findViewById(R.id.imageView1);item.name_textview = (TextView) convertView.findViewById(R.id.textView1);item.price_textview = (TextView) convertView.findViewById(R.id.textView2);convertView.setTag(item);} else {item = (ListViewItemHolder) convertView.getTag();}Dish dish = dishList.get(position);//这里就是异步加载网络图片的地方Picasso.with(MainActivity.this).load(dish.getImgUrl()).into(item.img_iv);item.name_textview.setText(dish.getName());item.price_textview.setText(dish.getPrice() + "元");return convertView;}}// ListView的Item组件类private class ListViewItemHolder {ImageView img_iv;TextView name_textview;TextView price_textview;}}

下面是整个工程的下载链接,有兴趣的可以下载导入到自己的Eclipse中去运行:

Android Picasso


更多相关文章

  1. Android在使用WebView时,图片显示出错问题。
  2. Android(安卓)Webview使用攻略基础详解
  3. Android(安卓)项目模块化开发,提高开发效率。
  4. Android多分辨率适配原理
  5. RecyclerView中ViewHolder重用机制理解(解决图片错乱和闪烁问题)
  6. Android的List点击某一项之后的背景设置
  7. Android(安卓)开源框架Universal-Image-Loader完全解析(一)--- 基
  8. 深入探索 Android(安卓)内存优化(炼狱级别)
  9. Android(安卓)程序之在线词典[2010-05-08更新图片]

随机推荐

  1. android下实现程序不操作一段时间,执行另
  2. android跳转到应用市场进行软件评论和评
  3. android 用ExpandableListView实现的文件
  4. Android(安卓)JNI C调用Java
  5. Android下载后自动安装
  6. Android(安卓)简单的照相机程序
  7. Android中XML的基本操作(增、删、改、查)
  8. 解决ListView或ExpandableListView滚动时
  9. android 设置对话框的宽度和高度
  10. android studio 中出现"...ProjectScript