首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将视图(shimmer)用作imageView的占位符(Glide)

在Android开发中,使用Glide库加载图片时,可以通过设置一个shimmer效果作为ImageView的占位符,以提升用户体验。Shimmer效果是一种微妙的闪烁动画,可以让用户感知到内容正在加载中。

基础概念

  • Glide: 一个快速高效的Android图片加载库,用于从网络、本地文件系统或资源文件中加载图片。
  • Shimmer: 一种动画效果,通常表现为轻微的闪烁,用于表示内容正在加载中。

相关优势

  1. 提升用户体验: 通过显示加载动画,用户能明确知道内容正在加载,减少等待的焦虑感。
  2. 美观: Shimmer效果设计得当可以增加应用的视觉吸引力。
  3. 灵活性: 可以自定义Shimmer的颜色、方向、速度等属性,以适应不同的设计需求。

类型与应用场景

  • 简单Shimmer: 适用于大多数基本的加载场景。
  • 复杂Shimmer: 可以包含多个层次的闪烁效果,适用于需要更多视觉层次的应用界面。

实现步骤

以下是使用Glide结合Shimmer作为ImageView占位符的具体实现步骤:

添加依赖

首先,在项目的build.gradle文件中添加Glide和Shimmer的依赖:

代码语言:txt
复制
dependencies {
    implementation 'com.github.bumptech.glide:glide:4.12.0'
    implementation 'com.facebook.shimmer:shimmer:0.5.0'
}

在布局文件中添加Shimmer视图

在XML布局文件中,添加一个ShimmerFrameLayout作为ImageView的父容器:

代码语言:txt
复制
<com.facebook.shimmer.ShimmerFrameLayout
    android:id="@+id/shimmer_view_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="8dp">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:scaleType="centerCrop" />
</com.facebook.shimmer.ShimmerFrameLayout>

初始化Shimmer并加载图片

在Activity或Fragment中,初始化Shimmer并使用Glide加载图片:

代码语言:txt
复制
import com.bumptech.glide.Glide;
import com.facebook.shimmer.ShimmerFrameLayout;

public class MainActivity extends AppCompatActivity {
    private ShimmerFrameLayout shimmerFrameLayout;
    private ImageView imageView;

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

        shimmerFrameLayout = findViewById(R.id.shimmer_view_container);
        imageView = findViewById(R.id.imageView);

        // 开始Shimmer动画
        shimmerFrameLayout.startShimmer();

        // 使用Glide加载图片
        Glide.with(this)
            .load("https://example.com/image.jpg")
            .listener(new RequestListener<Drawable>() {
                @Override
                public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                    shimmerFrameLayout.stopShimmer();
                    return false;
                }

                @Override
                public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                    shimmerFrameLayout.stopShimmer();
                    return false;
                }
            })
            .into(imageView);
    }
}

可能遇到的问题及解决方法

  1. Shimmer动画不显示: 确保ShimmerFrameLayout的宽度和高度已正确设置,并且没有被其他视图遮挡。
  2. Glide加载失败: 检查网络连接或图片URL是否正确,确保Glide的权限已在AndroidManifest.xml中声明。

通过以上步骤,你可以有效地将Shimmer效果用作ImageView的占位符,提升应用的用户体验。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android-图片加载策略- Glide 入门和使用

在这里你将获得 android Glide 教程的入门介绍 Glide是一个安卓库,允许我们通过单行代码从互联网或网址获取图像。在我之前的一篇教程中,我向您展示了毕加索图像库的用法。...Glide是毕加索图书馆的一个很好的选择。大多数功能在两者中都很常见。 Glide是谷歌推荐的流行的Android图像库,甚至Google也在各种应用程序中使用它。以下是此库的一些功能。...---- Glide图像库的特点 支持获取图像,GIF和视频静止图像。 可以添加占位符和错误图像。 支持磁盘缓存。 图像调整大小和裁剪。...Glide胜过 Picasso 的最大优势之一是Glide支持GIF。 ---- Android Glide教程 让我们快速跳转到实际的教程部分。 如何使用Glide获取图像?...Glide.with(context).load(IMAGE_URL).into(imageView); ---- 占位符和图像异常处理 您可以添加占位符图像,直到从Internet加载图像。

1.4K10

Google推荐的图片加载库Glide:最新版使用指南(含新特性)

编译工程,打开build目录中的GlideRequests,可以看见自动生成了一个方法: ? 现在可以使用你添加的类型了: ? 4 占位符 占位符就是请求的图片没加载出来时显示的默认图片。...Glide支持三种不同情况下的占位符: Placeholder 请求图片加载中 Error 请求图片加载错误 Fallback 请求url/model为空 设置占位符 ?...Glide中的请求参数主要有: Placeholders 占位符 Transformations 变换 Caching Strategies 缓存策略 组件特定参数:编码质量,解码参数等。...TransitionOptions TransitionOptions决定图片加载完成如何从占位符图片(或者之前的图片)过渡。 淡入 交叉淡入 不过渡 ?...7 Transitions(动画) 普通动画 Glide中的过渡动画是指占位符到请求图片或缩略图到完整尺寸请求图片的动画。过渡动画只能针对单一请求,不能跨请求执行。

3.1K30
  • Android Glide使用姿势与原理分析

    设置占位符和错误图片 你可以利用placeholder()方法设置加载过程中显示的占位符图片,以及使用error()方法设置加载失败时显示的图片: Glide.with(context) .load...(imageView) 图片压缩 Glide通过根据目标ImageView的大小和ScaleType来计算图片的实际大小,并进行压缩。...在加载图片时,需要指定目标ImageView的宽高和ScaleType。Glide会根据这些信息决定图片的压缩方式。...若目标ImageView的宽高比例与图片的比例不一致,Glide会根据ScaleType计算缩放比例,然后将图片按比例压缩,以适应ImageView大小。...若目标ImageView的宽高比例与图片的比例一致,Glide会直接加载原始图片,不进行压缩。 通过这种方式,Glide根据目标ImageView来自动进行图片压缩,以提高加载速度和节省内存。

    85430

    Android开发笔记(一百七十一)使用Glide加载网络图片

    2、网络图片的链接地址,以http或者https打头,参数类型为字符串。 3、准备显示网络图片的图像视图实例,参数类型为ImageView。...假设在Activity内部调用Glide,且图片链接放在mImageUrl,演示的图像视图名叫iv_network,那么实际的Glide加载代码是下面这样的:         Glide.with(this...虽然Glide支持上述四种显示类型,但它无法设定FIT_XY对应的平铺方式,若想让图片平铺至充满整个图像视图,还得调用图像视图的setScaleType方法,将拉伸类型设置为ImageView.ScaleType.FIT_XY...: placeholder:设置加载开始的占位图。...在得到网络图片之前,会先在图像视图展现占位图。 error:设置发生错误的提示图。网络图片获取失败之时,会在图像视图展现提示图。 override:设置图片的尺寸。

    4K20

    Glide-图片加载框架全解(一)- 基本用法

    那么回顾一下Glide最基本的使用方式,其实就是关键的三步走:先with(),再load(),最后into()。熟记这三步,你就已经入门Glide了。 占位图 现在我们来学一些Glide的扩展内容。...当然可以,Glide提供了各种各样非常丰富的API支持,其中就包括了占位图功能。 顾名思义,占位图就是指在图片的加载过程中,我们先显示一张临时的图片,等图片加载出来了再替换成要加载的图片。...下面我们就来学习一下Glide占位图功能的使用方法,首先我事先准备好了一张loading.jpg图片,用来作为占位图显示。...另外,这个占位图的用法其实也演示了Glide当中绝大多数API的用法,其实就是在load()和into()方法之间串接任意想添加的功能就可以了。...也正是因为Glide是如此的智能,所以刚才在开始的时候我就说了,在绝大多数情况下我们都是不需要指定图片大小的,因为Glide会自动根据ImageView的大小来决定图片的大小。

    1.1K10

    Android图片加载框架最全解析(一),Glide的基本用法

    那么回顾一下Glide最基本的使用方式,其实就是关键的三步走:先with(),再load(),最后into()。熟记这三步,你就已经入门Glide了。 占位图 现在我们来学一些Glide的扩展内容。...当然可以,Glide提供了各种各样非常丰富的API支持,其中就包括了占位图功能。 顾名思义,占位图就是指在图片的加载过程中,我们先显示一张临时的图片,等图片加载出来了再替换成要加载的图片。...下面我们就来学习一下Glide占位图功能的使用方法,首先我事先准备好了一张loading.jpg图片,用来作为占位图显示。...另外,这个占位图的用法其实也演示了Glide当中绝大多数API的用法,其实就是在load()和into()方法之间串接任意想添加的功能就可以了。...可以看到,当点击Load Image按钮之后会立即显示一张占位图,然后等真正的图片加载完成之后会将占位图替换掉。 当然,这只是占位图的一种,除了这种加载占位图之外,还有一种异常占位图。

    2.2K110

    深入理解Glide(1)——Glide的使用

    2.load:重载方法,可传入图片地址的Uri,本地资源id等 3.into:参数为一个ImageView或Taget对象 占位图设置 为了给用户更好的体验,在图片还未加载出来时候,我们一般会设置一张占位图...); placeholder为设置图片加载前占位图,error为设置加载出错后占位图。...).load(url).apply(options).into(imageView); 注意:当我们使用override制定图片大小后,最终展示在imageview的效果,是与imageview的scanType...显示GIF Glide的强大之处在于除了加载图片之外,还可以加载GIF Glide.with(this).asGif().load(url).into(imageView); 如上代码即可展示GIF...图片转换 我们可以在Glide将图片加载到ImageView显示之前进行一些操作,比如实现圆角化、圆形化、模糊化等等,Glide内置了一些转换的API RequestOptions options =

    76240

    Android图片加载框架最全解析(八),带你全面了解Glide 4的用法

    当然可以,Glide提供了各种各样非常丰富的API支持,其中就包括了占位图功能。 顾名思义,占位图就是指在图片的加载过程中,我们先显示一张临时的图片,等图片加载出来了再替换成要加载的图片。...下面我们就来学习一下Glide占位图功能的使用方法,首先我事先准备好了一张loading.jpg图片,用来作为占位图显示。...这里我们先创建了一个RequestOptions对象,然后调用它的placeholder()方法来指定占位图,再将占位图片的资源id传入到这个方法中。...可以看到,当点击Load Image按钮之后会立即显示一张占位图,然后等真正的图片加载完成之后会将占位图替换掉。 除了这种加载占位图之外,还有一种异常占位图。....into(imageView); } } 指定图片大小 实际上,使用Glide在大多数情况下我们都是不需要指定图片大小的,因为Glide会自动根据ImageView的大小来决定图片的大小,以此保证图片不会占用过多的内存从而引发

    2.7K70

    懵了,面试官突然问我:Glide是干啥的?我对着那Glide新版本就是一顿暴讲

    既然不好直观的分析说明,我们就罗列对应优势,方便需要的时候对号入座 优雅的调用姿 Glide.with(fragment).load(url).into(imageView); 多维度的图片格式(png...= null) { // 在此方法中克隆,以便如果使用此RequestBuilder加载到视图中,然后加载到其他目标中, //则不会保留基于上一个视图的缩放类型应用的转换。...Preconditions.checkNotNull(previous).isRunning()) { //使用上一个请求而不是新请求,如跳过设置占位符、跟踪和取消跟踪目标以及获取视图维度这些事在个人请求中完成的...Preconditions.checkNotNull(previous).isRunning()) { //使用上一个请求而不是新请求,如跳过设置占位符、跟踪和取消跟踪目标以及获取视图维度这些事在个人请求中完成的...//由于视图大小可能已更改,此时希望重新启动加载的用户需要在启动加载之前手动清除View或Target。

    3K21

    【Android从零单排系列九】《Android视图控件——ImageView》

    ,Fresco,Glide对比 前言 小伙伴们,在上文中我们介绍了Android视图控件Button控件,本文我们继续盘点,介绍一下Android视图控件中的第四个控件——ImageView。...:Android 中ImageView 显示图片的几种方法简要分析_再见孙悟空_的博客-CSDN博客 四.图片加载框架 1.图片加载框架 imageloader picasso Glide Fresco...Picasso:和Square的网络库一起能发挥最大作用,因为Picasso可以选择将网络请求的缓存部分交给了okhttp实现 Glide:模仿了Picasso的API,而且在他的基础上加了很多的扩展(...比如gif等支持),Glide默认的Bitmap格式是RGB_565,比 Picasso默认的ARGB_8888格式的内存开销要小一半;Picasso缓存的是全尺寸的(只缓存一中),而Glide缓存的是跟...并且默认使用ARGB_8888格式缓存图片,缓存体积大 Glide 支持GIF图片的加载,图片缓存也会自动缩放,默认使用RGB_565格式缓存图片,是Picasso缓存体积的一半 Fresco 优点:

    1.3K30

    Glide源码阅读理解一小时

    .into(imageView); 上述是Fragmeng中Glide将一张网络图片显示到ImageView的代码,下面源码分析的时候我们也会用这段代码进行分析,看看这么简单的API到底是怎么实现的。...*2.允许将模型与视图的尺寸组合以获取模型的资源具体尺寸。...Glide 的内置过渡以一致的方式运行,并且将根据加载图像的位置在某些情况下避免运行。 ? 在这里插入图片描述 //包装视图的目标将能够提供所有必要的参数并开始过渡。...public interface Transition { //包含视图的接口,该视图公开了运行各种类型的必需的方法 //Glide中所有ViewTarget的子类都实现了该接口...Preconditions.checkNotNull(previous).isRunning()) { //使用上一个请求而不是新请求来进行优化,例如跳过设置占位符,跟踪和取消跟踪目标并获取视图尺寸在单独的请求中完成

    2.5K10

    android图片加载库Glide

    哈哈,两者的内存消耗现在差不多一样了,但是不得不说的是在这一点上Glide确实比Picasso做的要好,因为Glide可以在每种情况下自动的计算Imageview的尺寸。...当我们调整imageview的大小时,Picasso会不管imageview大小是什么,总是直接缓存整张图片,而Glide就不一样了,它会为每个不同尺寸的Imageview缓存一张图片,也就是说不管你的这张图片有没有加载过...,只要imageview的尺寸不一样,那么Glide就会重新加载一次,这时候,它会在加载的imageview之前从网络上重新下载,然后再缓存。...防止各位不明白,再来举个例子,如果一个页面的imageview是200*200像素,而另一个页面中的imageview是100*100像素,这时候想要让两个imageview像是同一张图片,那么Glide...// Picasso .transform(new CircleTransform()) // Glide .transform(new CircleTransform(context)) 设置占位图片和错误图片

    1.9K60

    Android源码分析:这是一份详细的图片加载库Glide源码讲解攻略

    Glide 的使用步骤如下: Glide.with(this).load(url).into(imageView); // 参数说明 // 参数1:Context context // Context对于很多...getFallbackDrawable() : null; // 若有error的占位图,则采用先获取error的占位图 if (error == null) { error...= getErrorDrawable(); } // 若没有error的占位图,则再去获取一个loading占位图 if (error == null) { error...... } 所以此处显示出Glide的用法: 若传入图片的url为 Null,会采用error / loading的占位图进行代替 图片请求开始前,会先使用 Loading 占位图 代替 最终的图片显示...// 因为GifBitmapWrapper是无法直接显示到ImageView上的,只有Bitmap或者Drawable才能显示到ImageView上。

    1.3K50
    领券