1. 程式人生 > >android app -- Picasso 二級快取載入圖片,可控制載入圖片大小(附小demo)

android app -- Picasso 二級快取載入圖片,可控制載入圖片大小(附小demo)

今天小組開會,聽組長提到Picasso 載入圖片,之前一直用的都是imageLoader載入圖片,剛好這幾天臨近過年,專案比較鬆,下午抽了一段時間學習了一下這個載入圖片的神器。

Picasso 官網:

http://square.github.io/picasso/

很好很強大,但是英語太爛看不懂,瞬間就醉了。開始從網上搜集資料,發現有個翻譯的不錯的網站,並且有對原始碼進行分析:

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0731/1639.html

如果想快速用一下,那麼就別看上面的了,篇幅太長,講到原始碼部分還不定看得懂。

整個的Picasso 使用,其實簡單到一行程式碼呼叫就可以完成

Picasso.with(mcontext).load(list.get(i)).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).resize(100,100).centerCrop().into(viewHolder.imagelist);

將jar包copy進專案中,直接呼叫,其中 load(圖片地址,可url,可本地),placeholder(當圖片正在載入過程的佔位圖),error(圖片載入失敗時候顯示的圖片),resize(將圖片剪下縮放到長寬),centerCrop()顯示的scaleType ,into(將圖片放進哪個控制元件)。

並且自帶二級快取

這是最簡單的載入圖片的方式了。

自己寫了個小demo,可以參考下。

package demo.tdotapp.com.picassodemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ListView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {

    private ListView imagelist
; private ImagelistAdapter adapter; //放圖片資源的集合 private ArrayList<String> list =new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imagelist= (ListView) findViewById(R.id.imagelist); list.add("http://h.hiphotos.baidu.com/image/w%3D310/sign=53d5f82103e9390156028b3f4bec54f9/574e9258d109b3deb38ea469cebf6c81800a4cf9.jpg"); list.add("http://c.hiphotos.baidu.com/image/w%3D310/sign=1214242166380cd7e61ea4ec9145ad14/ae51f3deb48f8c5436841ebe39292df5e1fe7fc8.jpg"); list.add("http://c.hiphotos.baidu.com/image/w%3D310/sign=4bebf5c06e81800a6ee58f0f813433d6/7c1ed21b0ef41bd537dde4bb53da81cb38db3df6.jpg"); adapter=new ImagelistAdapter(MainActivity.this,list); imagelist.setAdapter(adapter); } }

package demo.tdotapp.com.picassodemo;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
/**
 * Created by GT on 2016/1/29.
 */
public class ImagelistAdapter extends BaseAdapter {
    private Context mcontext;
ArrayList<String> list = new ArrayList<>();
    public ImagelistAdapter(Context context, ArrayList<String> getlist) {
        this.mcontext = context;
        this.list = getlist;
}

    @Override
public int getCount() {
        return list.size();
}

    @Override
public Object getItem(int i) {
        return list.get(i);
}

    @Override
public long getItemId(int i) {
        return 0;
}

    @Override
public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder viewHolder = null;
        if (view == null) {
            viewHolder =new ViewHolder();
view = LayoutInflater.from(mcontext).inflate(R.layout.list_item, null);
viewHolder.imagelist = (ImageView) view.findViewById(R.id.item_img);
view.setTag(viewHolder);
} else {
            viewHolder = (ViewHolder) view.getTag();
}
        //最簡單的載入方式,load裡面為圖片的url(當然也可以是本地資源啊什麼的),into進image控制元件裡面去。
Picasso.with(mcontext).load(list.get(i)).into(viewHolder.imagelist);
//將圖片切成長寬都是100 載入到控制元件上,適合確定控制元件長寬
Picasso.with(mcontext).load(list.get(i)).resize(100, 100).centerCrop().into(viewHolder.imagelist);
//新增空白和佔位圖片。載入圖片中有一個佔位圖片,載入失敗錯誤顯示另一張圖片
Picasso.with(mcontext).load(list.get(i)).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(viewHolder.imagelist);
//彙總常用的方法,直接拿這個用就行了
Picasso.with(mcontext).load(list.get(i)).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).resize(100,100).centerCrop().into(viewHolder.imagelist);
        return view;
}
    class ViewHolder {
        ImageView imagelist;
}
}

關鍵地方註釋很清晰了,這裡就不再做解釋了。

原創文章,轉載請註明出處: http://blog.csdn.net/qq_33078541?viewmode=contents

Demo地址(不需要積分,android studio版):

http://download.csdn.net/detail/qq_33078541/9422534