Picasso
1.简介
Picasso是Square公司出品的一个强大的图片下载和缓存图片库
1)在adapter中需要取消已经不在视野范围的ImageView图片资源的加载,否则会导致图片错位,Picasso已经解决了这个问题。
2)使用复杂的图片压缩转换来尽可能的减少内存消耗
3)自带内存和硬盘二级缓存功能
2.基本用法
①普通加载图片
- Picasso.with(PicassoActivity.this)
- .load("http://n.sinaimg.cn/translate/20160819/9BpA-fxvcsrn8627957.jpg")
- .into(ivPicassoResult1);
②裁剪的方式加载图片
- Picasso.with(PicassoActivity.this)
- .load("http://n.sinaimg.cn/translate/20160819/9BpA-fxvcsrn8627957.jpg")
- .resize(100,100)
- .into(ivPicassoResult1);
③选择180度
- Picasso.with(PicassoActivity.this)
- .load("http://n.sinaimg.cn/translate/20160819/9BpA-fxvcsrn8627957.jpg")
- .rotate(180)
- .into(ivPicassoResult1);
3.ListView资源加载的方法
- placeholder(xxx). 设置资源加载过程中的显示的Drawable。
- error(xxx).设置load失败时显示的Drawable。
- into(xxx) 设置资源加载到的目标 包括ImageView Target等
eg:Adapter中getView()方法中
- // 加载图片
- Picasso.with(mContext)
- .load(Constants.IMAGES[position])
- .placeholder(R.drawable.atguigu_logo)
- .error(R.drawable.atguigu_logo)
- .into(holder.iv);
4.常用工具类
- public class PicassoUtil {
- //加载本地图片
- public static void setImg(Context context, int resId, ImageView imgView){
- Picasso.with(context)
- .load(resId)
- .config(Bitmap.Config.RGB_565)//8位RGB位图
- .fit()
- .into(imgView);
- }
- //按照一定的宽高加载本地图片,带有加载错误和默认图片
- public static void setImg(Context context,int resId,ImageView imgView,int weight,int height){
- Picasso.with(context)
- .load(resId)//加载本地图片
- .config(Bitmap.Config.RGB_565)//8位RGB位图
- .resize(weight,height)//设置图片的宽高
- .into(imgView);//把图片加载到控件上
- }
- //加载网络图片到imgview,带有加载错误和默认图片
- public static void setImg(Context context, String imgurl, int resId, ImageView imgView){
- Picasso.with(context)
- .load(imgurl)//加载网络图片的url
- .config(Bitmap.Config.RGB_565)//8位RGB位图
- .placeholder(resId)//默认图片
- .error(resId)//加载错误的图片
- .fit()//图片的宽高等于控件的宽高
- .into(imgView);//把图片加载到控件上
- }
- public static void setImg(Context context, String imgurl, ImageView imgView){
- Picasso.with(context)
- .load(imgurl)//加载网络图片的url
- .config(Bitmap.Config.RGB_565)//8位RGB位图
- .fit()//图片的宽高等于控件的宽高
- .into(imgView);//把图片加载到控件上
- }
- //加载网络图片到Viewpager
- public static void setImg(Context context, String imgurl, ViewPager imgView){
- Picasso.with(context)
- .load(imgurl)//加载网络图片的url
- .config(Bitmap.Config.RGB_565)//8位RGB位图
- .fit()//图片的宽高等于控件的宽高
- .into((Target) imgView);//把图片加载到控件上
- }
- //加载网络图片到Viewpager,带有加载错误和默认图片
- public static void setImg(Context context, String imgurl, int resId, ViewPager imgView){
- Picasso.with(context)
- .load(imgurl)//加载网络图片的url
- .config(Bitmap.Config.RGB_565)//8位RGB位图
- .placeholder(resId)//默认图片
- .error(resId)//加载错误的图片
- .fit()//图片的宽高等于控件的宽高
- .into((Target) imgView);//把图片加载到控件上
- }
- //按照设定的宽高加载网络图片到imgview
- public static void setImg(Context context, String imgurl,ImageView imgView,int weight,int height){
- Picasso.with(context)
- .load(imgurl)//加载网络图片的url
- .config(Bitmap.Config.RGB_565)//8位RGB位图
- .resize(weight,height)//设置图片的宽高
- .into(imgView);//把图片加载到控件上
- }
- //按照设定的宽高加载网络图片到imgview,带有加载错误和默认图片
- public static void setImg(Context context, String imgurl, int resId,int weight,int height, ImageView imgView){
- Picasso.with(context)
- .load(imgurl)//加载网络图片的url
- .config(Bitmap.Config.RGB_565)//8位RGB位图
- .placeholder(resId)//默认图片
- .error(resId)//加载错误的图片
- .resize(weight,height)//设置图片的宽高
- .into(imgView);//把图片加载到控件上
- }
- }
PicassoUtil
5.图片变换
在module的gradle中添加转换库:
- dependencies {
- compile 'jp.wasabeef:picasso-transformations:2.1.0'
- // If you want to use the GPU Filters
- compile 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1'
- }
- repositories {
- jcenter()
- }
Activity中:
- List<String> data = new ArrayList<>();
- for (int i = 1; i<= 36; i++){
- data.add(i+"");
- }
- // 初始化listview
- PicassoTransformationsAdapter picassoTransformationsAdapter = new PicassoTransformationsAdapter(PicassoTransfromationsActivity.this,data);
- lvPicassoTransfromations.setAdapter(picassoTransformationsAdapter);
PicassoListviewAdapter:
- public class PicassoTransformationsAdapter extends BaseAdapter {
- private Context mContext;
- private List<String> mData;
- public PicassoTransformationsAdapter(Context context, List<String> data) {
- mContext = context;
- mData = data;
- }
- @Override
- public int getCount() {
- return mData == null ? 0 : mData.size();
- }
- @Override
- public Object getItem(int position) {
- return null;
- }
- @Override
- public long getItemId(int position) {
- return 0;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- ViewHolder holder;
- if(convertView == null) {
- convertView = View.inflate(mContext, R.layout.item_picasso_transformations,null);
- holder = new ViewHolder(convertView);
- convertView.setTag(holder);
- }else {
- holder = (ViewHolder) convertView.getTag();
- }
- // 显示名称
- holder.name.setText("item"+(position + 1));
- int integer = Integer.parseInt(mData.get(position));
- switch (integer) {
- case 1: {
- int width = Utils.dip2px(mContext, 133.33f);
- int height = Utils.dip2px(mContext, 126.33f);
- Picasso.with(mContext)
- .load(R.drawable.check)
- .resize(width, height)
- .centerCrop()
- .transform((new MaskTransformation(mContext, R.drawable.mask_starfish)))
- .into(holder.image);
- break;
- }
- case 2: {
- int width = Utils.dip2px(mContext, 150.0f);
- int height = Utils.dip2px(mContext, 100.0f);
- Picasso.with(mContext)
- .load(R.drawable.check)
- .resize(width, height)
- .centerCrop()
- .transform(new MaskTransformation(mContext, R.drawable.chat_me_mask))
- .into(holder.image);
- break;
- }
- case 3:
- Picasso.with(mContext)
- .load(R.drawable.demo)
- .transform(new CropTransformation(300, 100, CropTransformation.GravityHorizontal.LEFT,
- CropTransformation.GravityVertical.TOP))
- .into(holder.image);
- break;
- case 4:
- Picasso.with(mContext).load(R.drawable.demo)
- // 300, 100, CropTransformation.GravityHorizontal.LEFT, CropTransformation.GravityVertical.CENTER))
- .transform(new CropTransformation(300, 100)).into(holder.image);
- break;
- case 5:
- Picasso.with(mContext)
- .load(R.drawable.demo)
- .transform(new CropTransformation(300, 100, CropTransformation.GravityHorizontal.LEFT,
- CropTransformation.GravityVertical.BOTTOM))
- .into(holder.image);
- break;
- case 6:
- Picasso.with(mContext)
- .load(R.drawable.demo)
- .transform(new CropTransformation(300, 100, CropTransformation.GravityHorizontal.CENTER,
- CropTransformation.GravityVertical.TOP))
- .into(holder.image);
- break;
- case 7:
- Picasso.with(mContext)
- .load(R.drawable.demo)
- .transform(new CropTransformation(300, 100))
- .into(holder.image);
- break;
- case 8:
- Picasso.with(mContext)
- .load(R.drawable.demo)
- .transform(new CropTransformation(300, 100, CropTransformation.GravityHorizontal.CENTER,
- CropTransformation.GravityVertical.BOTTOM))
- .into(holder.image);
- break;
- case 9:
- Picasso.with(mContext)
- .load(R.drawable.demo)
- .transform(new CropTransformation(300, 100, CropTransformation.GravityHorizontal.RIGHT,
- CropTransformation.GravityVertical.TOP))
- .into(holder.image);
- break;
- case 10:
- Picasso.with(mContext)
- .load(R.drawable.demo)
- .transform(new CropTransformation(300, 100, CropTransformation.GravityHorizontal.RIGHT,
- CropTransformation.GravityVertical.CENTER))
- .into(holder.image);
- break;
- case 11:
- Picasso.with(mContext)
- .load(R.drawable.demo)
- .transform(new CropTransformation(300, 100, CropTransformation.GravityHorizontal.RIGHT,
- CropTransformation.GravityVertical.BOTTOM))
- .into(holder.image);
- break;
- case 12:
- Picasso.with(mContext)
- .load(R.drawable.demo)
- .transform(new CropTransformation((float) 16 / (float) 9,
- CropTransformation.GravityHorizontal.CENTER,
- CropTransformation.GravityVertical.CENTER))
- .into(holder.image);
- break;
- case 13:
- Picasso.with(mContext)
- .load(R.drawable.demo)
- .transform(new CropTransformation((float) 4 / (float) 3,
- CropTransformation.GravityHorizontal.CENTER,
- CropTransformation.GravityVertical.CENTER))
- .into(holder.image);
- break;
- case 14:
- Picasso.with(mContext)
- .load(R.drawable.demo)
- .transform(new CropTransformation(3, CropTransformation.GravityHorizontal.CENTER,
- CropTransformation.GravityVertical.CENTER))
- .into(holder.image);
- break;
- case 15:
- Picasso.with(mContext)
- .load(R.drawable.demo)
- .transform(new CropTransformation(3, CropTransformation.GravityHorizontal.CENTER,
- CropTransformation.GravityVertical.TOP))
- .into(holder.image);
- break;
- case 16:
- Picasso.with(mContext)
- .load(R.drawable.demo)
- .transform(new CropTransformation(1, CropTransformation.GravityHorizontal.CENTER,
- CropTransformation.GravityVertical.CENTER))
- .into(holder.image);
- break;
- case 17:
- Picasso.with(mContext)
- .load(R.drawable.demo)
- .transform(new CropTransformation((float) 0.5, (float) 0.5,
- CropTransformation.GravityHorizontal.CENTER,
- CropTransformation.GravityVertical.CENTER))
- .into(holder.image);
- break;
- case 18:
- Picasso.with(mContext)
- .load(R.drawable.demo)
- .transform(new CropTransformation((float) 0.5, (float) 0.5,
- CropTransformation.GravityHorizontal.CENTER,
- CropTransformation.GravityVertical.TOP))
- .into(holder.image);
- break;
- case 19:
- Picasso.with(mContext)
- .load(R.drawable.demo)
- .transform(new CropTransformation((float) 0.5, (float) 0.5,
- CropTransformation.GravityHorizontal.RIGHT,
- CropTransformation.GravityVertical.BOTTOM))
- .into(holder.image);
- break;
- case 20:
- Picasso.with(mContext)
- .load(R.drawable.demo)
- .transform(new CropTransformation((float) 0.5, 0, (float) 4 / (float) 3,
- CropTransformation.GravityHorizontal.CENTER,
- CropTransformation.GravityVertical.CENTER))
- .into(holder.image);
- break;
- case 21:
- Picasso.with(mContext)
- .load(R.drawable.demo)
- .transform(new CropSquareTransformation())
- .into(holder.image);
- break;
- case 22:
- Picasso.with(mContext)
- .load(R.drawable.demo)
- .transform(new CropCircleTransformation())
- .into(holder.image);
- break;
- case 23:
- Picasso.with(mContext)
- .load(R.drawable.demo)
- .transform(new ColorFilterTransformation(Color.argb(80, 255, 0, 0)))
- .into(holder.image);
- break;
- case 24:
- Picasso.with(mContext)
- .load(R.drawable.demo)
- .transform(new GrayscaleTransformation())
- .into(holder.image);
- break;
- case 25:
- Picasso.with(mContext)
- .load(R.drawable.demo)
- .transform(new RoundedCornersTransformation(30, 0,
- RoundedCornersTransformation.CornerType.BOTTOM_LEFT))
- .into(holder.image);
- break;
- case 26:
- Picasso.with(mContext)
- .load(R.drawable.check)
- .transform(new BlurTransformation(mContext, 25, 1))
- .into(holder.image);
- break;
- case 27:
- Picasso.with(mContext)
- .load(R.drawable.demo)
- .transform(new ToonFilterTransformation(mContext))
- .into(holder.image);
- break;
- case 28:
- Picasso.with(mContext)
- .load(R.drawable.check)
- .transform(new SepiaFilterTransformation(mContext))
- .into(holder.image);
- break;
- case 29:
- Picasso.with(mContext)
- .load(R.drawable.check)
- .transform(new ContrastFilterTransformation(mContext, 2.0f))
- .into(holder.image);
- break;
- case 30:
- Picasso.with(mContext)
- .load(R.drawable.check)
- .transform(new InvertFilterTransformation(mContext))
- .into(holder.image);
- break;
- case 31:
- Picasso.with(mContext)
- .load(R.drawable.check)
- .transform(new PixelationFilterTransformation(mContext, 20))
- .into(holder.image);
- break;
- case 32:
- Picasso.with(mContext)
- .load(R.drawable.check)
- .transform(new SketchFilterTransformation(mContext))
- .into(holder.image);
- break;
- case 33:
- Picasso.with(mContext)
- .load(R.drawable.check)
- .transform(new SwirlFilterTransformation(mContext, 0.5f, 1.0f, new PointF(0.5f, 0.5f)))
- .into(holder.image);
- break;
- case 34:
- Picasso.with(mContext)
- .load(R.drawable.check)
- .transform(new BrightnessFilterTransformation(mContext, 0.5f))
- .into(holder.image);
- break;
- case 35:
- Picasso.with(mContext)
- .load(R.drawable.check)
- .transform(new KuwaharaFilterTransformation(mContext, 25))
- .into(holder.image);
- break;
- case 36:
- Picasso.with(mContext)
- .load(R.drawable.check)
- .transform(new VignetteFilterTransformation(mContext, new PointF(0.5f, 0.5f),
- new float[]{0.0f, 0.0f, 0.0f}, 0f, 0.75f))
- .into(holder.image);
- break;
- }
- return convertView;
- }
- class ViewHolder{
- @Bind(R.id.iv_picasso)
- ImageView image;
- @Bind(R.id.tv_picasso)
- TextView name;
- public ViewHolder(View view) {
- ButterKnife.bind(this, view);
- }
- }
- }
Picasso的更多相关文章
- 第一次源码分析: 图片加载框架Picasso源码分析
使用: Picasso.with(this) .load("http://imgstore.cdn.sogou.com/app/a/100540002/467502.jpg") . ...
- Picasso设置圆角
package liu.roundimagedemo.view; import android.graphics.Bitmap; import android.graphics.BitmapShade ...
- Android 三大图片加载框架的对比——ImageLoader,Picasso,Glide
一.ImageLaoder介绍 << Universal ImageLoader 是很早开源的图片缓存,在早期被很多应用使用 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹ass ...
- 8.4.4 Picasso
Picasso 收到加载及显示图片的任务,创建 Request 并将它交给 Dispatcher,Dispatcher 分发任务到具体 RequestHandler,任务通过 MemoryCache ...
- picasso总结
public class UMDocApplication extends Application { private Picasso picasso = null; /**获取Picasso对象** ...
- 图片加载框架Picasso解析
picasso是Square公司开源的一个Android图形缓存库 主要有以下一些特性: 在adapter中回收和取消当前的下载: 使用最少的内存完成复杂的图形转换操作: 自动的内存和硬盘缓存: 图形 ...
- Android图片加载库:最全面的Picasso讲解
前言 上文已经对当今 Android主流的图片加载库 进行了全面介绍 & 对比 如果你还没阅读,我建议你先移步这里阅读 今天我们来学习其中一个Android主流的图片加载库的使用 - Pica ...
- Android之Picasso --zz
简介: Picasso是Square公司开源的一个Android图形缓存库.可以实现图片下载和缓存功能. 特点: 1.加载载网络或本地图片并自动缓存处理: 2.链式调用: 3.图形转换操作,如变换大小 ...
- Android开源框架——Picasso
开篇——介绍Picasso (Picasso是什么?)Picasso:A Powerfull Image Downloading and Caching Library for Android,即An ...
随机推荐
- javap生成的字节码
https://www.zhihu.com/question/49470442/answer/135812845http://blog.csdn.net/tzs_1041218129
- php报错: PHP Warning: PHP Startup: memcache: Unable to initialize module
在mac上通过brew 安装php的memcache扩展(brew install php56-memcache)后运行 ~ php -mPHP Warning: PHP Startup: mem ...
- iBatis.Net(C#)系列Demo源码
iBatis.Net(C#)系列一:简介及运行环境源码 [下载] iBatis.Net(C#)系列二:SQL数据映射源码 [下载] iBatis.Net(C#)系列三:数据库查询源码 [下载]
- IOS中多版本,多设备类型支持注意事项
IOS系统从07年出来,到现在也有6年了,每年发布一次到两次新的设备,从iPhone1,iPhone2 ... iPhone4s再到最新的iPhone5.硬件在升级的过程中CPU的架构也可能发生变化, ...
- Qt的零碎知识
1.QObject是所有Qt对象的基类,他给C++的类带来了若干新的功能.使用Q_OBJECT宏能声明一个C++类为一个QObject.如: class Notepad : public QMainW ...
- Struts2知多少(2) Struts2 是什么
Struts2是流行和成熟的基于MVC设计模式的Web应用程序框架. Struts2不只是Struts1下一个版本,它是一个完全重写的Struts架构. WebWork框架开始以Struts框架为基础 ...
- Android加载SO库UnsatisfiedLinkError错误的原因及解决方案
Android 应用开发者应该对 UnsatisfiedLinkError 这种类型的错误比较熟悉了,这个问题一直困扰着广大的开发者,那么有没有想过有可能你什么都没做错,也会出现这个问题呢? 我们在 ...
- Unity3D内置着色器
Unity内部提供了一些可以直接使用的着色器,这些内置着色器包括以下6个方面: (1)Performance of Unity shaders 着色器的性能和两个方面有关:shader本身和rende ...
- Lua中的weak表——weak table
弱表(weak table)是一个很有意思的东西,像C++/Java等语言是没有的.弱表的定义是:A weak table is a table whose elements are weak ref ...
- DDD:Command模式的好处
背景 会有朋友问我为啥用命令模式(Command Pattern)组织应用层,先看看MartinFowler咋说:http://martinfowler.com/bliki/CommandOrient ...