今天小组开会,听组长提到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; } }
关键地方注释很清晰了,这里就不再做解释了。
Demo地址(不需要积分,android studio版):
http://download.csdn.net/detail/qq_33078541/9422534