博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android之Picasso --zz
阅读量:6224 次
发布时间:2019-06-21

本文共 3925 字,大约阅读时间需要 13 分钟。

简介:

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显示网络图片:

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

 

[java]   
 
 
  1. //表示菜类(经过烹调的蔬菜、蛋品、肉类等)  
  2. public class Dish {  
  3.   
  4.     private String imgUrl; // 图片地址  
  5.     private String name; // 菜名  
  6.     private String price; // 菜价  
  7.       
  8.     public Dish(String imgUrl, String name, String price) {  
  9.         this.imgUrl = imgUrl;  
  10.         this.name = name;  
  11.         this.price = price;  
  12.     }  
  13.   
  14.     public String getImgUrl() {  
  15.         return imgUrl;  
  16.     }  
  17.   
  18.     public void setImgUrl(String imgUrl) {  
  19.         this.imgUrl = imgUrl;  
  20.     }  
  21.   
  22.     public String getName() {  
  23.         return name;  
  24.     }  
  25.   
  26.     public void setName(String name) {  
  27.         this.name = name;  
  28.     }  
  29.   
  30.     public String getPrice() {  
  31.         return price;  
  32.     }  
  33.   
  34.     public void setPrice(String price) {  
  35.         this.price = price;  
  36.     }  
  37.   
  38. }  

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

 

 

[java]   
 
 
  1. import java.util.ArrayList;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.LayoutInflater;  
  6. import android.view.View;  
  7. import android.view.ViewGroup;  
  8. import android.widget.BaseAdapter;  
  9. import android.widget.ImageView;  
  10. import android.widget.ListView;  
  11. import android.widget.TextView;  
  12.   
  13. import com.squareup.picasso.Picasso;  
  14.   
  15. public class MainActivity extends Activity {  
  16.   
  17.     private static final String BASE_URL = "http://img1.3lian.com/img2011/w1/106/85/";  
  18.       
  19.     @Override  
  20.     protected void onCreate(Bundle savedInstanceState) {  
  21.         super.onCreate(savedInstanceState);  
  22.         setContentView(R.layout.activity_main);  
  23.   
  24.         ArrayList<Dish> dishList = new ArrayList<Dish>();  
  25.   
  26.         dishList.add(new Dish(BASE_URL + "42.jpg", "水煮鱼片", "38.00"));  
  27.         dishList.add(new Dish(BASE_URL + "34.jpg", "小炒肉", "18.00"));  
  28.         dishList.add(new Dish(BASE_URL + "37.jpg", "清炒时蔬", "15.00"));  
  29.         dishList.add(new Dish(BASE_URL + "11.jpg", "金牌烤鸭", "36.00"));  
  30.         dishList.add(new Dish(BASE_URL + "12.jpg", "粉丝肉煲", "20.00"));  
  31.   
  32.         ListView mListView = (ListView) this.findViewById(R.id.listview);  
  33.         MainListViewAdapter adapter = new MainListViewAdapter(dishList);  
  34.         mListView.setAdapter(adapter);  
  35.     }  
  36.   
  37.     // ListView适配器  
  38.     private class MainListViewAdapter extends BaseAdapter {  
  39.   
  40.         private ArrayList<Dish> dishList;  
  41.   
  42.         public MainListViewAdapter(ArrayList<Dish> list) {  
  43.             this.dishList = list;  
  44.         }  
  45.   
  46.         @Override  
  47.         public int getCount() {  
  48.             return dishList.size();  
  49.         }  
  50.   
  51.         @Override  
  52.         public Object getItem(int position) {  
  53.             return dishList.get(position);  
  54.         }  
  55.   
  56.         @Override  
  57.         public long getItemId(int position) {  
  58.             return position;  
  59.         }  
  60.   
  61.         @Override  
  62.         public View getView(int position, View convertView, ViewGroup parent) {  
  63.             ListViewItemHolder item = null;  
  64.             if (convertView == null) {  
  65.                 convertView = LayoutInflater.from(MainActivity.this).inflate(  
  66.                         R.layout.main_listview_item, null);  
  67.                 item = new ListViewItemHolder();  
  68.                 item.img_iv = (ImageView) convertView  
  69.                         .findViewById(R.id.imageView1);  
  70.                 item.name_textview = (TextView) convertView  
  71.                         .findViewById(R.id.textView1);  
  72.                 item.price_textview = (TextView) convertView  
  73.                         .findViewById(R.id.textView2);  
  74.   
  75.                 convertView.setTag(item);  
  76.             } else {  
  77.                 item = (ListViewItemHolder) convertView.getTag();  
  78.             }  
  79.   
  80.             Dish dish = dishList.get(position);  
  81.   
  82.             //这里就是异步加载网络图片的地方  
  83.             Picasso.with(MainActivity.this).load(dish.getImgUrl())  
  84.                     .into(item.img_iv);  
  85.   
  86.             item.name_textview.setText(dish.getName());  
  87.             item.price_textview.setText(dish.getPrice() + "元");  
  88.   
  89.             return convertView;  
  90.         }  
  91.   
  92.     }  
  93.   
  94.     // ListView的Item组件类  
  95.     private class ListViewItemHolder {  
  96.         ImageView img_iv;  
  97.         TextView name_textview;  
  98.         TextView price_textview;  
  99.     }  
  100. }  

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

 

 

Android之Picasso - bear_huangzhen的专栏 - 博客频道 - CSDN.NET

http://blog.csdn.net/bear_huangzhen/article/details/45868755

你可能感兴趣的文章
第27章 java I/O输入输出流
查看>>
search-a-2d-matrix
查看>>
Ubuntu 12.04 Virtualbox 启用USB 设备支持
查看>>
C# DataTable的常用用法讲解
查看>>
〖Linux〗秒开www.stackoverflow.com,非代理方式
查看>>
〖Linux〗Linux的smb地址转换Windows格式(两者互转)
查看>>
mnesia
查看>>
python编程基础之二十一
查看>>
YouTrack Changing Database Location for EXE Distribution(windows service)
查看>>
Cooperation.GTST团队第二周项目总结
查看>>
zookeeper与kafka安装部署及java环境搭建(发布订阅模式)
查看>>
settings
查看>>
3617:Best Cow Line
查看>>
JavaScript学习总结(4)——JavaScript数组
查看>>
【kmp】hdu1171 Number Sequence
查看>>
计算机网络-自定向下方法之计算机网络和因特网
查看>>
[若有所悟]提升工作效率的一些小技巧——资源管理器篇
查看>>
BI数据库管理RPD配置
查看>>
binary-tree-maximum-path-sum(mock)
查看>>
error C2244 "无法将函数定义与现有的声明匹配"的解决方法
查看>>