picasso使用

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


发布了44 篇原创文章 · 获赞 20 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/u013134722/article/details/72731452