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);
圆角变换效果
顺时针旋转效果
使用示例
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图
来源:https://blog.csdn.net/fdqy_/article/details/121881228


猜你喜欢
- 通过上一篇的分析,我们知道了独占模式获取锁有三种方式,分别是不响应线程中断获取,响应线程中断获取,设置超时时间获取。在共享模式下获取锁的方式
- 最近做项目中遇到ToolBar因为不同的界面toobar不同为了描述统一的风格。相信大家也非常清楚,大多数ToolBar包括以下几个方面左标
- 在上一篇里已经向大家介绍了如何使用GDI+绘制简单的图像,这一片继续向大家介绍其它一些绘图知识.1.首先我们来看下上一片中我们使用过的Pen
- GPS定位是目前很多手机都有的功能,且非常实用。本文以实例形式讲述了Android中GPS定位的用法。分享给大家供大家参考之用。具体方法如下
- 1.饿汉模式饿汉模式也叫预加载模式,它是在类加载时直接创建并初始化单例对象,所以它并不存在线程安全的问题。它是依靠 ClassLoader
- 在日常系统开发中,经常需要在adroid的framework修改或添加自己的配置。例如在config.xml 添加一个新的变量。我这边测试发
- 用C#想写一个直接将数据库查询得到的datatable,直接导出为csv格式的文件,拷贝到导出的操作类后,一直catch到的错误提示是对路径
- 一、简介ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便。比如:Task支持线程的
- 俗话说,工欲善其事,必先利其器。要做微信公众号开发,两样东西不可少,那就是要有一个用来测试的公众号,还有一个用来调式代码的开发环境。测试公众
- 前言之前用springboot的时候,只知道捕获异常使用try{}catch,一个接口一个try{}catch,这也是大多数开发人员异常处理
- 一直使用Eclipse环境开发Android,也尝鲜使用过Android Studio去开发,各种IDE配合Android SDK及SDK原
- 通过yml配置文件为静态成员变量赋值我们对springboot为普通成员变量的方式很熟悉,所以经常定式思维的认为静态属性的赋值和普通属性一样
- 通过反射根据提供的表名、POJO类型、数据对象自动生成sql语句。如名为 User 的JavaBean与名为 user 的数据库表对应,可以
- 一、判断语句最常用的顺序结构只能顺序执行,并不能进行判断和选择。于是便有了下面两种分支结构if语句switch语句1. if语句一个if语句
- 本文实例讲述了Android实现在屏幕上移动图片的方法。分享给大家供大家参考。具体实现方法如下:1. Speed.java文件:packag
- C#调用MFC 窗口 DLLMFC DLL创建一个窗口类,加public和AFX_EXT_CLASSMFC DLL属性注意MFC的使用:在共
- 应用启动数据初始化接口CommandLineRunner和Application详解在SpringBoot项目中创建组件类实现Command
- 一、程序环境以下内容通过C#及VB.NET代介绍如何给Excel文档添加数字签名,以及删除Excel文档中已有的数字签名。工具使用最近发布的
- 在观察者模式中有2个要素:一个是被观察对象,另一个是观察者。但被观察对象的状态发生改变会通知观察者。举例:把订阅报纸的人看作是观察者,把报纸
- 一、背景Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和