package com.yixincaipiao.demos; import android.content.Context; import android.graphics.Bitmap; import android.net.Uri; import android.text.TextUtils; import android.widget.ImageView; import com.squareup.picasso.Picasso; import com.squareup.picasso.Transformation; import com.yixincaipiao.R; import java.io.File; /** * Created by u on 2017 */ public class PicassoUtils { /** * @param loadImg 加载中 * @param errorImg 错误时 * @param tag 用于列表滑动暂停使用 */ public static void loadImage(Context mContext, String url, int loadImg, int errorImg, String tag, ImageView mImageView) { Picasso.with(mContext).setIndicatorsEnabled(true);//左上角显示图片来自何方 Picasso.with(mContext).setLoggingEnabled(true);//开启日志打印 if (url != null && !url.contains("http")) {//本地文件 加载 File file = new File(url); Picasso.with(mContext).load(file).placeholder(loadImg).error(errorImg).into(mImageView); } else { //默认使用565 减少内存压力,特殊情况可以加配置, if (TextUtils.isEmpty(tag)) { Picasso.with(mContext).load(url).config(Bitmap.Config.RGB_565).placeholder(loadImg).error(errorImg).into(mImageView); } else { Picasso.with(mContext).load(url).config(Bitmap.Config.RGB_565).tag(tag).placeholder(loadImg).error(errorImg).into(mImageView); } } } /** * 所有数据使用默认null */ public static void loadImage(Context mContext, String url, ImageView mImageView) { loadImage(mContext, url, R.mipmap.ic_launcher, R.mipmap.ic_launcher, null, mImageView); } /** * 列表使用时 * * @param tag 标签 */ public static void loadImage(Context mContext, String url, String tag, ImageView mImageView) { loadImage(mContext, url, R.mipmap.ic_launcher, R.mipmap.ic_launcher, null, mImageView); } /** * 指定大小加载图片 * * @param width 宽 * @param height 高 */ public static void loadImageWithSize(Context mContext, String url, int width, int height, ImageView mImageView) { // centerCrop().resize 一般配合使用 ,让图片显示在中央 Picasso.with(mContext).load(url).centerCrop().resize(width, height).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(mImageView); } /** * 裁剪图片 * * @param mContext 上下文 * @param path 图片路径 * @param mImageView 控件 */ public static void loadImageCrop(Context mContext, String path, Transformation transformation, ImageView mImageView) { Picasso.with(mContext).load(path).transform(transformation).into(mImageView);//new CropImageView } /** * 清除对应缓存 */ public static void clearImagCache(Context mContext, Uri uri, File file, String path) { if (null != uri && !TextUtils.isEmpty(uri.toString())) { Picasso.with(mContext).invalidate(uri); return; } if (null != file) { Picasso.with(mContext).invalidate(file); return; } if (!TextUtils.isEmpty(path)) { Picasso.with(mContext).invalidate(path); } } /** * 自定义图片裁剪,,上面裁剪图片使用 */ public static class CropImageView implements Transformation { @Override public Bitmap transform(Bitmap source) { int size = Math.min(source.getWidth(), source.getHeight()); int x = (source.getWidth() - size) / 2; int y = (source.getHeight() - size) / 2; Bitmap newBitmap = Bitmap.createBitmap(source, x, y, size, size); if (newBitmap != null) { //内存回收 source.recycle(); } return newBitmap; } @Override public String key() { return "lgl"; } } }Picasso 的缓存 https://segmentfault.com/a/1190000009267947()
Picasso 默认情况吓是进行了内存缓存和磁盘缓存的。如果我们不想进行缓存,可以使用下面的方式:
禁止内存缓存
.memoryPolicy(MemoryPolicy.NO_CACHE,MemoryPolicy.NO_STORE)//禁止内存缓存
这里的 NO_CACHE:表示处理请求的时候跳过检查内存缓存 NO_STORE: 表示请求成功之后,不将最终的结果存到内存。
禁止磁盘缓存:
.networkPolicy(NetworkPolicy.NO_CACHE)//禁止磁盘缓存
这里的磁盘缓存有三个类型。分别是:
Picasso.with(mContext).load(url).memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE).placeholder(loadImg).error(errorImg).into(mImageView); NO_CACHE: 表示处理请求的时候跳过处理磁盘缓存 NO_STORE: 表示请求成功后,不将结果缓存到Disk,但是这个只对OkHttp有效。 OFFLINE: 这个就跟 上面两个不一样了,如果networkPolicy方法用的是这个参数,那么Picasso会强制这次请求从缓存中获取结果,不会发起网络请求,不管缓存中能否获取到结果。
Picasso开启日志和地址tag
开启日志:
.setLoggingEnabled(
true);
//开启日志打印缓存指示器:
.setIndicatorsEnabled(
true);
//显示指示器当开启缓存指示器后,会在图片的左上角看到几种颜色的标识。
绿色表示从内存加载、蓝色表示从磁盘加载、红色表示从网络加载。
Picasso 允许我们为一个请求设置tag来管理请求cancelTag(Object tag) 取消设置了给定tag的所有请求
pauseTag(Object tag) 暂停设置了给定tag 的所有请求
resumeTag(Object tag) 重启被暂停的给定tag的所有请求.tag("Profile ListView") //参数为 Object设置tag
图片质量
Picasso.with( imageView.getContext() ).load(url).config(Bitmap.Config.RGB_565) 这个参数在loading之后 Android中有四种,分别是: ALPHA_8:每个像素占用1byte内存 ARGB_4444:每个像素占用2byte内存 ARGB_8888:每个像素占用4byte内存 RGB_565:每个像素占用2byte内存 通过get请求获取bitmap 同步请求 try { Bitmap bitmap = Picasso.with(context).load(url).get(); } catch (IOException e) { e.printStackTrace(); }参考网站: https://segmentfault.com/a/1190000009267947#articleHeader3
http://blog.csdn.net/myfwjy/article/details/52451238
http://blog.csdn.net/smallcheric/article/details/51055095
picasso使用
最新推荐文章于 2024-04-03 01:23:27 发布