Picasso(一基本使用)

本文详细介绍了 Picasso 图片加载库的基本使用方法,包括如何加载网络图片、本地资源,进行图片转换、设置图片占位符及错误显示、调整图片尺寸、设置优先级等。此外还介绍了如何使用标签管理和优化 ListView 中的图片加载过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Picasso(一基本使用)

首先添加依赖(和我之前分析的EventBus一样,都是从一些重要的方法入手,获取不同的版本有所区别,但是相近的版本都是有联系的)

implementation 'com.squareup.picasso:picasso:2.71828'

下面是我们经常使用的模板代码

Picasso.get()// 通过单例获取对象
            // 加载的网络URL地址,获取本地的资源路径也是可以的
            .load("url")
            // 图片的转换(个人对图片的处理)
            .transform(transformation)
            // 设置图片占位(当要加载的图片还没有显示的时候出现)
            .placeholder(R.drawable.ic_launcher_background)
            // 图片加载失败的时候出现
            .error(R.drawable.ic_launcher_foreground)
            // 设置图片的尺寸(此时时像素,当然也可以设置dp,用dimen即可)
            .resize(400, 600)
            // 设置图片的显示,防止图片出现拉伸,变形等
            .centerCrop()
            // 可以做动画
            .rotate(260)
            // 设置优先级
            .priority(Picasso.Priority.HIGH)
            // 设置标签给请求
            .tag("tag")
            // 设置内存缓存策略(默认时开启的)
            .memoryPolicy(MemoryPolicy.NO_CACHE)
            // 设置磁盘缓存策略(同样默认开启)
            .networkPolicy(NetworkPolicy.NO_CACHE)
            // 显示图片,此时的这个callBack回调接口可以实现也可以不实现
            .into(imageView, new Callback() {
                @Override
                public void onSuccess() {
                    System.out.println("请求成功");
                }

                @Override
                public void onError(Exception e) {
                    System.out.println("请求失败");
                }
            });

对于图片转换,下面有一个例子(裁剪出一个圆形)

private Transformation transformation = new Transformation() {
    @Override
    public Bitmap transform(Bitmap source) {
        // 获取源图片的宽高
        int width = source.getWidth();
        int height = source.getHeight();
        // 创建副本并绘制
        Bitmap copyBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(copyBitmap);
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        canvas.drawCircle(width / 2, height / 2, Math.min(width, height) / 2, paint);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        canvas.drawBitmap(source, 0, 0, paint);
        return copyBitmap;
    }

    @Override
    public String key() {
        return "circle";
    }
};

上面的一个链式调用有一个令人疑惑的点就是,为什么要设置tag,就是为请求打上一个标签。因为打上了标签,我们就可以找到这个请求,并对其做一些操作,比如,暂停当前请求等。说到这,我们可能想到的就是ListView,在ListView如果使用Picasso,如果一时间加载大量的图片,难免会造成UI卡顿。就有下面的操作

listView.setOnScrollListener(new AbsListView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            Picasso picasso = Picasso.get();
            // 可以在滑动停止的时候加载图片,防止UI卡顿
            if (scrollState == SCROLL_STATE_IDLE) {
                picasso.resumeTag("tag");
            } else {
                picasso.pauseTag("tag");
            }
        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

        }
    });

至于,其他的属性设置就比较好理解,就打算从获取单例(get()),load,into这几个核心方法来简单说明以下Picasso的一些原理。

小结:

看到这个章节,我们需要知道和了解的就是Picasso的基本使用,设置一些我们常用的属性,以及这些属性代表的意思即可。

总结

在这个方法中,我们主要是完成一些初始化和配置工作,比如Picasso的创建,信息的获取,以及Dispatcher的创建。知道其中重要的核心类,线程的调度的重要handler就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值