安卓:Picasso——加载网络图片的库

news2024/9/23 7:32:52

目录

一、Picasso介绍及其优势

二、Picasso的使用方法

1、添加依赖:

2、Picasso常用方法:

1、加载图像:

 2、图像显示:

 3、图像处理:

4、图像占位符和错误处理:

5、缓存控制: 

6、清除缓存: 

调用Picasso库常用方法的示例:

1、加载图像并显示到ImageView:

 2、图像处理:

3、设置占位符和错误图像: 

4、缓存控制: 

 5、自定义图像转换器:

 三、Picasso使用例子

MainActivity : 

activity_main: 

 运行结果:

一、Picasso介绍及其优势

        Picasso是一个适用于Android的强大且易于使用的图片加载和显示库。它由Square开发,并提供了许多功能和选项,以帮助开发者更轻松地处理和展示图片。

以下是Picasso库的一些主要特点和优势:

1. 简单易用:Picasso提供了简洁而直观的API,使得加载和显示图片变得非常简单。只需几行代码就可以实现网络或本地图片的加载和显示。

2. 自动管理图片下载和缓存:Picasso会自动处理图片的下载和缓存,无需手动管理。它会根据需要自动加载和缓存图片,并在下次请求时从缓存中获取,以提高性能和节省数据使用量。

3. 强大的图片处理功能:Picasso支持各种常见的图片处理操作,如裁剪、旋转、缩放等,以满足不同的显示需求。可以根据ImageView的尺寸自动调整图片大小,并提供了灵活的接口来进行自定义的图片转换操作。

4. 错误处理和占位符:Picasso允许设置加载过程中的错误处理和占位符图片。当图片加载失败时,可以指定显示一个错误图片或者使用占位符图片代替,以提供更好的用户体验。

5. 请求优先级和标记:Picasso允许为每个图片请求设置优先级,并支持请求的取消和暂停。可以使用标记来管理和识别不同的图片请求,方便后续操作和处理。

6. 内存和磁盘缓存:Picasso会自动对已加载的图片进行内存和磁盘缓存,以提高性能并减少网络数据的消耗。它使用LRU (Least Recently Used) 算法来管理内存缓存,并使用磁盘缓存来避免重复下载图片。

7. 调试和日志记录:Picasso提供了调试功能和详细的日志记录,方便开发者在开发过程中定位和解决问题。可以开启调试标记显示图片加载来源,并打印详细的日志信息查看每个图片请求的状态和事件。

二、Picasso的使用方法

1、添加依赖:

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

2、Picasso常用方法:

1、加载图像:

  • load(String path):从指定路径加载图像,可以是本地文件路径或网络URL。
  • load(File file):从文件加载图像。
  • load(Uri uri):从Uri加载图像。
  • load(int resourceId):从资源ID加载图像。

 2、图像显示:

  • into(ImageView imageView):将图像显示到指定的ImageView中。
  • into(Target target):将图像显示到自定义的Target对象中,可以用于处理图像的进一步操作。
  • into(BitmapTarget target):将图像显示到自定义的BitmapTarget对象中,可以获取Bitmap对象进行进一步处理。

 3、图像处理:

  • resize(int width, int height):调整图像大小。
  • centerCrop():居中裁剪图像以适应ImageView的尺寸。
  • fit():按比例缩放图像,使其完全适应ImageView的尺寸。
  • rotate(float degrees):旋转图像指定角度。
  • transform(Transformation transformation):应用自定义的图像转换器。

4、图像占位符和错误处理:

  • placeholder(int resourceId):在加载图像之前显示的占位符。
  • error(int resourceId):加载图像失败时显示的错误占位符。

5、缓存控制: 

  • memoryPolicy(MemoryPolicy memoryPolicy):设置内存缓存策略。
  • networkPolicy(NetworkPolicy networkPolicy):设置网络缓存策略。

6、清除缓存: 

  • invalidate(String path):使指定路径的图像缓存失效。
  • clearMemory():清除内存缓存。
  • clearDiskCache():清除磁盘缓存。

调用Picasso库常用方法的示例:

1、加载图像并显示到ImageView:

ImageView imageView = findViewById(R.id.imageView);
// 使用Picasso加载网络图片
String imageUrl = "https://img-home.csdnimg.cn/images/20201124032511.png";        

Picasso.get().load(imageUrl).into(imageView);

 2、图像处理:

  • 调整图像大小:
Picasso.get().load(imageUrl)
            .resize(200, 200)
            .into(imageView);
  • 居中裁剪图像:
Picasso.get().load(imageUrl)
            .centerCrop()
            .into(imageView);
  • 旋转图像:
Picasso.get().load(imageUrl)
            .rotate(90)
            .into(imageView);

3、设置占位符和错误图像: 

Picasso.get().load(imageUrl)
            .placeholder(R.drawable.placeholder_image)
            .error(R.drawable.error_image)
            .into(imageView);

4、缓存控制: 

  • 禁用内存缓存:
Picasso.get().load(imageUrl)
            .memoryPolicy(MemoryPolicy.NO_CACHE)
            .into(imageView);
  • 清除磁盘缓存:
Picasso.get().clearDiskCache();

 5、自定义图像转换器:

Transformation transformation = new Transformation() {
    @Override
    public Bitmap transform(Bitmap source) {
        // 在此处对图像进行自定义转换
        return transformedBitmap;
    }

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

Picasso.get().load(imageUrl)
            .transform(transformation)
            .into(imageView);

 三、Picasso使用例子

MainActivity : 

package com.example.picassodemo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;
import com.squareup.picasso.Picasso;

public class MainActivity extends AppCompatActivity {

    private ImageView imageView;
    private Button load,rotate;
    String imageUrl = "https://img-home.csdnimg.cn/images/20201124032511.png"; // 替换为实际的图片URL

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 获取ImageView控件的引用
        imageView = findViewById(R.id.image_view);
        load = findViewById(R.id.load);
        rotate =findViewById(R.id.rotate);
        rotate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Picasso.get().load(imageUrl).rotate(90).fit().into(imageView);
            }
        });
        load.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 使用Picasso加载网络图片
                Picasso.get().load(imageUrl).placeholder(R.drawable.img).error(R.drawable.ic_launcher_background).fit().into(imageView);
            }
        });

    }
}

activity_main: 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <ImageView
        android:id="@+id/image_view"
        android:layout_width="200dp"
        android:layout_height="200dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.482"
        tools:srcCompat="@tools:sample/avatars" />

    <Button
        android:id="@+id/load"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="加载图片"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/image_view"
        app:layout_constraintVertical_bias="0.193" />

    <Button
        android:id="@+id/rotate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="旋转图片"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.796" />

</androidx.constraintlayout.widget.ConstraintLayout>

 运行结果:

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/801663.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

INDEMIND:告别人工智障,扫地机器人哪种避障方式能让你“躺平”?

方寸之间&#xff0c;腾转自如&#xff0c;这或许是人们对扫地机器人避障功能的理想期待。 谁才是扫地机器人的“最优解”&#xff1f; 评判一款扫地机器人好用与否&#xff0c;避障表现无疑是核心因素。一款能够准确有效规避家居、行人、动物的产品&#xff0c;不仅能够保障产…

标准信号槽

标准信号槽 定义使用关于绑定的注意事项 定义 在Qt提供的很多标准类中都可以对用户触发的某些特定事件进行检测, 因此当用户做了这些操作之后, 事件被触发类的内部就会产生对应的信号, 这些信号都是Qt类内部自带的, 因此称之为标准信号。 在Qt的很多类内部为我了提供了很多功…

k3s安装使用

文章目录 k3s单机安装报错:1. container-selinux软件包版本不匹配的问题 验证安装是否成功 【TODO】 集群安装&#xff1a;AutoK3skubectl连接1. 本机访问2. 远程机器访问 部署Kubernetes Dashboard v2.71. 部署2. 集群内 访问服务3. 集群外 访问服务3. 生成用户token、用token…

从大众汽车7亿美元入股小鹏说起,中国汽车时代已经来了

监制 | 何玺 排版 | 叶媛 中国汽车时代已经来了&#xff01; 7月26日&#xff0c;世界汽车企业大众宣布&#xff0c;将以7亿美元入股国内新势力造车企业小鹏汽车&#xff0c;并与后者共同开发面向中国的大众品牌电动车型&#xff1b;与此同时&#xff0c;大众旗下的奥迪品牌也…

pandas处理什么样的数据?

Pandas 是一个开源的第三方 Python 库&#xff0c;从 Numpy 和 Matplotlib 的基础上构建而来&#xff0c;享有数据分析“三剑客之一”的盛名&#xff08;NumPy、Matplotlib、Pandas&#xff09;。Pandas 已经成为 Python 数据分析的必备高级工具&#xff0c;它的目标是成为强大…

基于PCA和小波算法联合实现红外与可见光图像融合的Matlab仿真(完整源码+35组数据集)

以下是一个使用PCA和小波实现红外与可见光图像融合的Matlab仿真完整源码。源码中只需修改红外图像&#xff08;IR.bmp&#xff09;和可见光图像&#xff08;VI.bmp&#xff09;名字即可 文章目录 效果展示数据集展示步骤说明完整源码下载地址 效果展示 最终融合效果展示&#x…

HTML5网页设计小案例:帝豪集团总裁办通知网页设计

前言&#xff1a;本案例使用了HTML5和CSS3的知识点&#xff0c;使用HTML5设置了页面的基本布局&#xff0c;使用CSS3给字体设置了颜色&#xff0c;大小&#xff0c;类型&#xff0c;是否居中等内容&#xff0c;使页面设计更加美观。 帝豪集团总裁办通知网页设计HTML5全部代码如…

浮点数如何转二进制?

本文转载自CodeSheep这位大佬的推文https://mp.weixin.qq.com/s/LVpvmBO0GY6TC4gwL_12Yw 一、浮点数在计算机中是如何表示的&#xff1f;   学过《计算机组成原理》或者类似《计算机系统》这些课程的小伙伴们应该都知道&#xff0c;浮点数在计算机中的存储方式遵循IEEE 754浮…

如何维护你的电脑:提升性能和延长使用寿命

如何维护你的电脑&#xff1a;提升性能和延长使用寿命 &#x1f607;博主简介&#xff1a;我是一名正在攻读研究生学位的人工智能专业学生&#xff0c;我可以为计算机、人工智能相关本科生和研究生提供排忧解惑的服务。如果您有任何问题或困惑&#xff0c;欢迎随时来交流哦&…

本地编译rocketmq源码

源码下载 RocketMq下载 运行 这是rocketmq源码大致的业务分层&#xff0c;本地调试主要是启动nameserver和broker&#xff0c;其他的发送和接收的实现代码可直接使用example包中的官方例子&#xff0c;也可以自己编码代码实现。 启动namesrv包下的启动类&#xff0c;Namesrv…

【视觉SLAM入门】4.2 非线性最小二乘理论部分------线搜索,信赖域,最速/牛顿下降法,高斯牛顿,LM等原理推导

"天之道也" 0. 引入1. 最速下降法2. 牛顿法3. (实用)G-N法4. (实用)L-M方法5. 总结 注意&#xff1a; 上一节得到的最小二乘问题&#xff0c;本节来讨论---- 求解非线性最小二乘问题 \color {red}求解非线性最小二乘问题 求解非线性最小二乘问题 0. 引入 求解这个简…

在线 Javascript 代码编辑器,有代码提示功能

分享一个在线代码编辑器&#xff0c;有代码提示功能 github地址&#xff1a; https://github.com/microsoft/monaco-editor 在线预览&#xff1a;https://microsoft.github.io/monaco-editor/playground.html?sourcev0.40.0#example-creating-the-editor-hello-world 效果图…

7. Spring Boot 配置文件

目录 1. 配置文件作用 2. 配置文件格式 3. properties 配置文件说明 3.1 properties 基本语法 3.2 读取配置文件 3.3 缺点 4. yml 配置文件说明 4.1 properties 基本语法 4.2 读取配置文件 4.3 yml 配置不同的数据类型 布尔值 整数值 null 值 配置对象 配置集合 …

有状态的应用如何部署 1?

前面我们分享很多关于 K8S 的内容&#xff0c;有没有发现 pod 都是无状态&#xff0c;RS / RC 管理的 pod 也是无状态的&#xff0c;我们可以任意删除一个 pod&#xff0c;副本管理器又会马上给我们创建一个 pod 那么如果咱们的这个 pod 是有挂载持久卷的&#xff0c;那么我们…

java -- Stringbuild、Date和Calendar类

Stringbuild类 由于String类的对象内容不可改变&#xff0c;每次拼接都会构建一个新的String对象&#xff0c;既耗时&#xff0c;又浪费内存空间 这时需要通过java提供的StringBuild类解决这个问题 StringBuilder又称为可变字符序列&#xff0c;它是一个类似于 String 的字符串…

详解python中的类、模块、包的概念和区别

目录 Python中的类 Python中的模块 Python中的包 三者的区别 Python中的类 在Python中&#xff0c;类&#xff08;Class&#xff09;是一种面向对象编程&#xff08;Object-Oriented Programming, OOP&#xff09;的概念&#xff0c;用于创建具有相似属性和行为的对象的模板…

索马里ECTN认证开船后办?都可以办的,

索马里ECTN认证开船后办&#xff1f;都可以办的&#xff0c;没有特别时间要求&#xff0c;可以在开船前办&#xff0c;也可以在开船后再办。因为索马里ECTN货物跟踪单看上去像是一份“证书”的文件&#xff0c;主要作用是用于目的港清关&#xff0c;所以很多客户习惯把它称为EC…

Mybatis使用collection映射一对多查询分页问题

场景&#xff1a;页面展示列表&#xff0c;需要查询多的字段&#xff0c;和一的字段。并且还要分页。 这时候直接想到的是手写sql。 /*** 标签*/private List<BasicResidentTags> tags;原来的sql 。 <!--一对多映射--><resultMap id"many" type&qu…

(2)Mission Planner概述

文章目录 前言 2.1 什么是Mission Planner 2.2 历史 2.3 支持 2.4 浏览文档 前言 Mission Planner 是 ArduPilot 开源自动驾驶仪项目的全功能地面站应用程序。本页包含 Mission Planner 的背景信息和本网站的组织结构。 2.1 什么是Mission Planner Mission Planner 是用于…

Nginx动静分离、资源压缩、负载均衡、黑白名单、防盗链等实战

一、前言 Nginx是目前负载均衡技术中的主流方案&#xff0c;几乎绝大部分项目都会使用它&#xff0c;Nginx是一个轻量级的高性能HTTP反向代理服务器&#xff0c;同时它也是一个通用类型的代理服务器&#xff0c;支持绝大部分协议&#xff0c;如TCP、UDP、SMTP、HTTPS等。 二、…