zoukankan      html  css  js  c++  java
  • Android之Picasso --zz

    简介:

    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] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    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] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    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

    Android之Picasso - bear_huangzhen的专栏 - 博客频道 - CSDN.NET
    http://blog.csdn.net/bear_huangzhen/article/details/45868755

  • 相关阅读:
    如何设置ASP.NET页面的运行超时时间
    日志文件清理工具V1.1
    【原创】日志文件清理工具V1.0
    【分享】国外后台界面HTML源码 [免费]
    【分享】仿东软OA协同办公服务管理源码
    年底发福利了——分享一下我的.NET软件开发资源
    由12306动态验证码想到的ASP.NET实现动态GIF验证码(附源码)
    【分享】元旦送礼,商业源码免费赠送!
    给大家分享一个jQuery TAB插件演示
    【分享】双12了,也没啥可送大家的,就送大家点商业源码吧!
  • 原文地址:https://www.cnblogs.com/bluestorm/p/5763632.html
Copyright © 2011-2022 走看看