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

目录

一、Picasso介绍及其优势

二、Picasso的使用方法

1、添加依赖:

2、Picasso常用方法:

1、加载图像:

 2、图像显示:

 3、图像处理:

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

5、缓存控制: 

6、清除缓存: 

扫描二维码关注公众号,回复: 16939491 查看本文章

调用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>

 运行结果:

安卓图标库:iconfont-阿里巴巴矢量图标库

猜你喜欢

转载自blog.csdn.net/A125679880/article/details/131797932