android app -- Picasso 二級快取載入圖片,可控制載入圖片大小(附小demo)
阿新 • • 發佈:2019-02-07
今天小組開會,聽組長提到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=contentsDemo地址(不需要積分,android studio版):
http://download.csdn.net/detail/qq_33078541/9422534