一句代码加载网络图片到ImageView——Android Picasso

在这里介绍一个Android框架:Picasso。

 picassoSquare公司开源的一个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卡上的图片,程序资源文件。





  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值