Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android之Picasso

Android之Picasso

編輯:關於Android編程

簡介:

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 dishList = new ArrayList();

		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 dishList;

		public MainListViewAdapter(ArrayList 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中去運行:

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved