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显示网络图片:
这里找了四张网络菜谱图片,在代码中新添加一个菜类:
- //表示菜类(经过烹调的蔬菜、蛋品、肉类等)
- 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/";
- @Override
- protected 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;
- }
- @Override
- public int getCount() {
- return dishList.size();
- }
- @Override
- public Object getItem(int position) {
- return dishList.get(position);
- }
- @Override
- public long getItemId(int position) {
- return position;
- }
- @Override
- public 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 - bear_huangzhen的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/bear_huangzhen/article/details/45868755
Android之Picasso --zz的更多相关文章
- 玩转Android之Picasso使用详详详详详详解,从入门到源码剖析!!!!
Picasso是Squareup公司出的一款图片加载框架,能够解决我们在Android开发中加载图片时遇到的诸多问题,比如OOM,图片错位等,问题主要集中在加载图片列表时,因为单张图片加载谁都会写.如 ...
- Android 使用Picasso加载网络图片等比例缩放
在做android图片加载的时候,由于手机屏幕受限,很多大图加载过来的时候,我们要求等比例缩放,比如按照固定的宽度,等比例缩放高度,使得图片的尺寸比例得到相应的缩放,但图片没有变形.显然按照andro ...
- Java(Android)线程池zz
介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端执行一个异步任务你还只是如下new T ...
- Android图片加载与缓存开源框架:Android Glide
<Android图片加载与缓存开源框架:Android Glide> Android Glide是一个开源的图片加载和缓存处理的第三方框架.和Android的Picasso库类似,个人感觉 ...
- Android滑动动画ViewFlipper和视频播放VideoView的使用
Android滑动动画,可以用ViewPager或者ViewFlipper实现. ViewPager自带触摸滑动功能,结合Fragment使用很好,来自补充组件android-support-v4.j ...
- [转载]Android相关开发网站
my: Android 开发官方文档国内镜像-踏得网: http://wear.techbrood.com/index.html 转载自: http://my.oschina.net/luforn/b ...
- Android之Glide(非常好用的图片加载框架)
谷歌开发者论坛上,谷歌为我们介绍了一个名叫 Glide 的图片加载库,作者是bumptech. Glide是一种快速.高效的开源媒体管理和Android的包裹mediadecoding图像加载框架,内 ...
- Android 三大图片加载框架的对比——ImageLoader,Picasso,Glide
一.ImageLaoder介绍 << Universal ImageLoader 是很早开源的图片缓存,在早期被很多应用使用 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹ass ...
- Android图片加载库:最全面的Picasso讲解
前言 上文已经对当今 Android主流的图片加载库 进行了全面介绍 & 对比 如果你还没阅读,我建议你先移步这里阅读 今天我们来学习其中一个Android主流的图片加载库的使用 - Pica ...
随机推荐
- 使用SQLPlus连接Oracle实例
使用Windows徽标+R,打开运行对话框,输入cmd并回车. Microsoft Windows Microsoft Corporation.保留所有权利. C:\Users\user> 在C ...
- C#高级编程笔记 Day 3, 2016年9月 8日 抽象类
1.虚方法:把一个基类函数声明为 virtual,就可以在任何派生类中重写该函数. 2.在Java 中所有函数都是虚拟的,但是在C# 中,C# 要求在派生类的函数重写另一个函数时,要使用 overri ...
- hiho #1151 : 骨牌覆盖问题·二 (递推,数论)
#1151 : 骨牌覆盖问题·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上一周我们研究了2xN的骨牌问题,这一周我们不妨加大一下难度,研究一下3xN的骨牌问题? ...
- 2016年10月30日--JavaScript语法
1.基本数据类型:字符串.小数.整数.日期时间.布尔型等. 2.变量:[var]定义变量:var a:所有变量定义都用var定义,var是通用的可变类型. 3.类型转换:转为整数:parseInt() ...
- ZendStudio 解决svn导出项目乱码问题
从svn导出项目往往会出现乱码,可以右击项目,点击properties(或者选中项目alt+enter键进入)直接修改项目编码为utf-8,但是html文件还是乱码. 下面的方法可以解决: windo ...
- jquery学习——选择器
一.基础选择 1.$("*") 选择所有元素 2.$(".class") 选择某个类 3.$("#id") 选择某个id 4.$(" ...
- SQL Server 2012 自动增长列,值跳跃问题
介绍 从 SQL Server 2012 版本开始, 当SQL Server 实例重启之后,表格的自动增长列的值会发生跳跃,而具体的跳跃值的大小是根据增长列的数据类型而定的.如果数据类型是 整型(in ...
- keystone v3 相关介绍
1) 涉及到如下几个概念:User.Tenant.Role.Token.http://www.ibm.com/developerworks/cn/cloud/library/1506_yuwz_key ...
- 《oracle每天一练》Oracle之物化视图
相关帖子思考和跟踪 本文转自Ronger 物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实 ...
- Android之Activity之间跳转
本人自学Android,想到什么就写点什么.主要是怕忘了,哈哈~请观者不要建议~ 今天写点Android窗口之间的跳转以及自己理解: 1.Android中窗口之间的跳转,就是Activity之间的跳转 ...