Android图片加载库Glide用法

作者:fdqy 时间:2023-08-11 10:12:01 

Glide介绍

Glide是一个快速高效的Android图片加载库,注重于平滑的滚动。Glide提供了易用的API,高性能、可扩展的图片解码管道,以及自动的资源池技术。Glide 的主要目标是让任何形式的图片列表的滚动尽可能地变得更快、更平滑。

Android SDK 要求

Min Sdk Version - 使用 Glide 需要 min SDK 版本 API 14 (Ice Cream Sandwich) 或更高。

Compile Sdk Version - Glide 必须使用 API 27 (Oreo MR1) 或更高版本的 SDK 来编译。

Support Library Version - Glide 使用的支持库版本为 27

使用前的准备

下载

Jar

你可以直接在 GitHub 下载最新的 jar 包。并且还需要包含 Android v4支持库 的 jar 包。

Gradle

在build.gradle中加入如下依赖


implementation 'com.github.bumptech.glide:glide:4.12.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'

Maven

如果使用 Maven,同样可以添加对 Glide 的依赖。再次强调,你依旧需要添加 Android 支持库的依赖


<dependency>
 <groupId>com.github.bumptech.glide</groupId>
 <artifactId>glide</artifactId>
 <version>4.11.0</version>
 <type>aar</type>
</dependency>
<dependency>
 <groupId>com.google.android</groupId>
 <artifactId>support-v4</artifactId>
 <version>r7</version>
</dependency>
<dependency>
 <groupId>com.github.bumptech.glide</groupId>
 <artifactId>compiler</artifactId>
 <version>4.11.0</version>
 <optional>true</optional>
</dependency>

设置

从网络中加载图片


<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

从本地存储中加载图片


<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

基本用法


Glide.with(fragment)//传递activity或fragment
   .load(url)//本地地址或网络地址
   .into(imageView);//ImageView对象

这样就可以将图片加载到指定的ImageView中

在 ListView 和 RecyclerView 中的使用

在 ListView 或 RecyclerView 中加载图片的代码和在单独的 View 中加载完全一样


@Override
public void onBindViewHolder(ViewHolder holder, int position) {
   String url = urls.get(position);
   Glide.with(fragment)
       .load(url)
       .into(holder.imageView);
}

占位符

Glide有三种占位符,请求正在执行时展示placeholder Drawable,请求失败则展示error Drawable,请求的url为null,那么会展示fallback url


Glide.with(activity)
   .load(url)
   .placeholder(R.drawable.loading)//请求图片时展示的图片
   .error(R.drawable.error)//请求失败时展示的图片
   .fallback(R.drawable.fallback)//请求的图片地址(url)为空时展示的图片
   .into(imageView);

选项


RequestOptions requestOptions = new RequestOptions()
               .placeholder(R.drawable.loading)
               .error(R.drawable.error);

Glide.with(fragment)
   .load(url)
   .apply(requestOptions)
   .into(imageView);

apply()方法可以被调用多次,因此RequestOption可以被组合使用。如果 RequestOptions对象之间存在相互冲突的设置,那么只有最后一个被应用的RequestOptions会生效。

过渡动画

在 Glide 中,Transitions 允许你定义 Glide 如何从占位符到新加载的图片,或从缩略图到全尺寸图像过渡。Transition 在单一请求的上下文中工作,而不会跨多个请求。因此,Transitions 并不能让你定义从一个请求到另一个请求的动画(比如,交叉淡入效果)


DrawableCrossFadeFactory factory =
       new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();

GlideApp.with(context)
   .load(url)
   .apply(requestOptions)
   .transition(withCrossFade(factory))
   .placeholder(R.color.placeholder)
   .into(imageView);

除了交叉淡入效果,你也可以自定义

变换效果

当url地址为png时可能无法变换


RequestOptions requestOptions = new RequestOptions()
               .placeholder(R.drawable.loading)
               .error(R.drawable.error);

Glide.with(MainActivity.this)
   .load(url)
   .apply(requestOptions)
   .transform(new CircleCrop())//圆角图片
//  .transform(new RoundedCorners(30))//圆形图片角度统一
//  .transform(new GranularRoundedCorners(30, 50, 70, 80))//四个角单独指定角度
//  .transform(new Rotate(90))//顺时针旋转角度    
   .into(imageView);

圆角变换效果

Android图片加载库Glide用法

顺时针旋转效果

Android图片加载库Glide用法

使用示例

loading, error是提前下载到本地的图片,放在drawable中;url可以是一个网络图片的地址


public class MainActivity extends AppCompatActivity {

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

String url = "url of picture";
     ImageView imageView = findViewById(R.id.image_view);
       Glide.with(this)
               .load(url)
               .placeholder(R.drawable.loading)
               .error(R.drawable.error)
               .into(imageView);
   }
}

布局文件


<?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="match_parent"
       android:layout_height="match_parent"
       app:layout_constraintBottom_toBottomOf="parent"
       app:layout_constraintLeft_toLeftOf="parent"
       app:layout_constraintRight_toRightOf="parent"
       app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

权限设置如下


  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

下图是加载网络地址的情况。左图传入了错误的网络地址,那么就会展示error图;如果传入的网络图片地址正确,那么就会将正确的图片放入ImageView中;而在图片加载未完成时,该ImageView会展示出loading图

Android图片加载库Glide用法

来源:https://blog.csdn.net/fdqy_/article/details/121881228

标签:Android,Glide
0
投稿

猜你喜欢

  • JAVA实现PDF转HTML文档的示例代码

    2021-10-18 12:47:00
  • Java 中 hashCode() 与 equals() 的关系(面试)

    2023-08-29 18:03:57
  • android指定DatePickerDialog样式并不显示年的实现代码

    2022-07-13 05:23:08
  • 微信跳一跳辅助Java代码实现

    2022-03-31 19:12:03
  • 浅析Java设计模式编程中的单例模式和简单工厂模式

    2021-10-13 15:27:54
  • Java通过jersey实现客户端图片上传示例

    2022-09-17 15:44:24
  • Android中GridView布局实现整体居中方法示例

    2023-12-23 13:21:18
  • 详解JAVA动态代理

    2023-11-24 22:52:04
  • 关于Java float和double精度范围大小

    2023-11-29 00:52:01
  • 简介Winform中创建用户控件

    2021-10-14 04:39:37
  • grails不能运行fork模式解决方法

    2023-05-17 18:37:59
  • MyBatis传入集合 list 数组 map参数的写法

    2022-12-02 20:21:45
  • android Service基础(启动服务与绑定服务)

    2023-05-07 12:31:34
  • 基于Apache组件分析对象池原理的实现案例分析

    2023-11-05 16:55:57
  • C++ 双向循环链表类模版实例详解

    2022-10-29 18:04:49
  • Java中用爬虫进行解析的实例方法

    2021-06-23 09:07:00
  • Java中比较运算符compareTo()、equals()与==的区别及应用总结

    2023-11-28 20:08:28
  • Android 圆角边框的实现方式汇总

    2023-03-20 04:27:46
  • Java创建表格实例详解 <font color=red>原创</font>

    2022-12-22 04:59:13
  • C#图片切割、图片压缩、缩略图生成代码汇总

    2022-01-20 07:51:26
  • asp之家 软件编程 m.aspxhome.com