国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android入門教程之Picasso框架

2019-12-12 05:31:16
字體:
來源:轉載
供稿:網友

一、簡介:

Picasso是Square公司開源的一個Android圖形緩存庫。可以實現圖片下載和緩存功能。

二、Picasso的特性

Picasso是一個Android圖片加載緩存框架,它具有如下特性:

      1.支持任務優先級,會優先加載“優先級”較高的圖片。

      2.帶有統計監控功能,可以統計緩存命中率,實時監控已使用的內存等等。

      3.能夠根據當前網絡狀態自動調整并發線程數。

      4.支持圖片的延遲加載。

      5.本身不具有本地緩存,而是使用的OkHttp實現。

Picasso除了使用上比較簡單、功能特性豐富以外,還具備的一大優點便是源碼清晰易讀,適合于閱讀學習。

三、Picasso的基本使用

1. 添加依賴

在使用Picasso前,首先我們要添加依賴,如果使用的是Gradle,那只需要在模塊的build.gradle中添加如下語句:

compile 'com.squareup.picasso:picasso:2.5.2'

當然也可以下載jar包,然后添加到項目中,這里就不再贅述了。

2. 顯示圖片

使用Picasso做到這點真的是簡單到不要不要的了,只需要下面一句即可:

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

其中,context為當前應用上下文,imageView為我們想要在其中顯示圖片的ImageView對象。 Picasso不僅會在我們指定的ImageView中顯示指定圖片,而且還會幫助我們做好以下幾件事(很貼心有木有):

     1.在Adapter中檢測View的重用并自動取消之前的下載。

     2.對于一些復雜圖片變換,也只需要比較小的內存。

     3.自動進行內存緩存及磁盤緩存。
(1)自動取消圖片下載

當Picasso檢測到convertView不為空(View的重用)時,它會自動取消之前對于convertView的下載任務。

@Overridepublic voidgetView(intposition,View convertView,ViewGroup parent) {  SquaredImageView view = (SquaredImageView) convertView;  if(view ==null) {    view =newSquaredImageView(context);  }  String url = getItem(position);  Picasso.with(context).load(url).into(view);}

(2)圖片變換
使用Picasso,我們可以很容易的對圖片進行變換,以減少內存占用或是更適應于布局。只需要像下面一樣的一個鏈式調用(很簡單有木有):

Picasso.with(context)    .load(url)    .resize(50,50)    .centerCrop()    .into(imageView);

當然,我們也可以進行更加復雜的變換,通過實現Picasso中的Transformation接口,我們可以自定義一個“圖片變換器”。示例代碼如下:

public class CropSquareTransformation implements Transformation {  @Override  public Bitmaptransform(Bitmap source) {    int size = Math.min(source.getWidth(),source.getHeight());    int x = (source.getWidth() - size) /2;    int y = (source.getHeight() - size) /2;    Bitmap result = Bitmap.createBitmap(source,x,y,size,size);    if(result != source) {      source.recycle();    }    return result;  }  @Override  public String key() {    return "square()";  }}

把以上類的實例傳遞給transform方法即可完成對圖片的自定義變換。

(3)占位符(place holders)

Picasso支持在圖片下載過程中以及圖片加載失敗時顯示一個“占位符圖片”,這個特性使用起來也很簡單,請看以下示例代碼:

Picasso.with(context)    .load(url)    .placeholder(R.drawable.user_placeholder)    .error(R.drawable.user_placeholder_error)    .into(imageView);

當重試三次仍然無法成功加載圖片就會顯示error方法參數中指定的圖片。

(4)資源加載

在使用Picasso時,Resources、assets、文件系統、ContentProvider都可以作為圖片的來源(很方便有木有):

Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);Picasso.with(context).load("file:///android_asset/DvpvklR.png").into(imageView2);Picasso.with(context).load(newFile(...)).into(imageView3);

四、實例演示

下面實現一個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;   } } 

五、總結

以上就是本文的全部內容了,看到這里,是不是已經愛上了Picasso,快去和它愉快的玩兒耍吧,希望本文對大家的學習和工作能有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 诸城市| 乌兰浩特市| 自治县| 陇南市| 穆棱市| 兴山县| 福贡县| 东阳市| 垦利县| 怀柔区| 双鸭山市| 韩城市| 建阳市| 新宾| 黄龙县| 左贡县| 白水县| 临邑县| 瑞昌市| 四子王旗| 沙坪坝区| 江津市| 读书| 团风县| 灌云县| 越西县| 沙田区| 长兴县| 扬州市| 宣城市| 当涂县| 伊春市| 白沙| 曲靖市| 宁德市| 博白县| 行唐县| 牡丹江市| 吉木乃县| 寿宁县| 汝州市|