当前位置: 首页 > 知识库问答 >
问题:

如何使用视图(微光)作为图像视图(滑动)的占位符

钱志
2023-03-14

我正在使用Glide将图像加载到我的imageView(位于回收视图中):

Glide.with(image.context).load(url)
        .error(context.getDrawable(R.drawable.placeholder))
        .into(image)

我看到Glide库还有一个“占位符”函数,它可以在图像仍在加载时加载一个可绘制的图像。

另一方面,对于整个recyclerView,我使用Facebook Shimmer库来显示正在加载recyclerView。

看看我的应用程序,一切正常。但是,在消除微光(提取数据)和显示图像之间仍然存在间隔时间。这正是需要占位符的时候。我想知道,是否有任何方法也可以将微光用作imageView的占位符?Glide中的占位符功能仅支持Drawable,微光是一个视图。

有没有办法将微光转换为可拉伸的?还是GIF?还是其他建议?

共有3个答案

佟和安
2023-03-14

在我的情况下,我想要一个带圆角的绘图作为占位符,这是不支持的库,我发现你可以实现这一点使用ShapeableImageView从谷歌材料设计。

1.将Google Material Design库添加到您的dependencies'com中。谷歌。Android材料:材料:版本为1.2.1及以上的1.2.1'

2.在列表项视图中,将ImageView定义为ShapeableImageView,如下所示:

<com.google.android.material.imageview.ShapeableImageView
   android:id="@+id/shapeImageView"
   android:layout_width="70dp"
   android:layout_height="70dp"
   android:background="@android:color/holo_red_dark"
   app:layout_constraintStart_toStartOf="parent"
   app:layout_constraintTop_toTopOf="parent"/>

3.在RecyclerView中。ViewHolder类将上述ShapeableImageView的ShapePearanceModel设置为CornerFamily。圆角,角半径以像素为单位,并在Glide中加载可作为占位符的微光绘制,如下所示:

//initialize shimmer
val shimmer = Shimmer.ColorHighlightBuilder()
     .setBaseColor(ContextCompat.getColor(itemView.context, R.color.teal_200))
     .setBaseAlpha(0.7f)
     .setHighlightAlpha(0.7f)
     .setHighlightColor(ContextCompat.getColor(itemView.context, R.color.purple_700))
     .setDuration(1800)
     .setDirection(Shimmer.Direction.LEFT_TO_RIGHT)
     .setAutoStart(true)
     .build()

 //create ShimmerDrawable()
 val shimmerDrawable = ShimmerDrawable()
 shimmerDrawable.setShimmer(shimmer)

 //set the ShapeAppearanceModel to CornerFamily.ROUNDED and the radius in pixels
 val radius: Float = dpToPx(itemView.context, 15).toFloat();
 shapeImageView.setShapeAppearanceModel(shapeImageView.getShapeAppearanceModel()
                .toBuilder()
                .setAllCorners(CornerFamily.ROUNDED, radius)
                .build())

 //load url from Glide and add shimmerDrawable as placeholder
 Glide.with(itemView.context).load(item.url)
        .placeholder(shimmerDrawable)
        .into(shapeImageView)

使用辅助类将半径从dp转换为像素

fun dpToPx(context: Context, dp: Int): Int {
  return (dp * context.resources.displayMetrics.density).toInt()
}

以上结果将是:

束敏学
2023-03-14

我开发了一个库来轻松添加微光/骨架加载效果。https://github.com/AgnaldoNP/AGSkeletonLoading

README. md上有一个关于如何使用它的解释。你不需要添加一堆布局来模拟骨架,它是自动计算的。用于显示骨架的布局与显示内容相同。

如果对布局文件使用SkeletonImageView,只需调用startLoading()和stopLoading()来控制动画。我希望我帮助过你

华景同
2023-03-14

感谢Mike上面的评论:有一个ShimmerDrawable类,您可以在其中构建一个shimmer视图作为一个缺点,它可以在Glide中使用:

private val shimmer = Shimmer.AlphaHighlightBuilder()// The attributes for a ShimmerDrawable is set by this builder
    .setDuration(1800) // how long the shimmering animation takes to do one full sweep
    .setBaseAlpha(0.7f) //the alpha of the underlying children
    .setHighlightAlpha(0.6f) // the shimmer alpha amount
    .setDirection(Shimmer.Direction.LEFT_TO_RIGHT)
    .setAutoStart(true)
    .build()

// This is the placeholder for the imageView
    val shimmerDrawable = ShimmerDrawable().apply {
        setShimmer(shimmer)
    }


Glide.with(image.context).load(url)
        .placeholder(shimmerDrawable)
        .error(context.getDrawable(R.drawable.placeholder))
        .into(image)
 类似资料:
  • 我需要使用javaFX2执行以下操作: 1-)加载图像并使用imageView显示。[好的] 2-)右键单击并选择“添加节点”选项,屏幕上将出现一个黑色圆圈,您可以将圆圈拖动到图像的任何位置。[好的] 3-)使用鼠标的滚轮放大或缩小图像视图,在图像上提供“缩放感觉”。[确定] 3.1-)但是,每次缩放图像时,我都希望我的圆圈遵循缩放比例,这意味着它们不能保持在屏幕的相同位置。[不知道] 我的问题是

  • 问题内容: 很难说出这里的要求。这个问题是模棱两可的,模糊的,不完整的,过于广泛的或修辞性的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开,请访问帮助中心。 7年前关闭。 我有一个网站,其中包含很多嵌入式YouTube视频;当前,这些站点是同时加载的,这当然会使站点在最初加载时运行得非常慢。 将图片加载为占位符/启动屏幕而非视频iframe的最佳方法是什么? 仅在单击时才 需要将

  • 灯光检视视图 切换到脚本参考页 灯光是图形渲染的基础组成部分,因为它们决定了对象的着色和投射的阴影。有关 Unity 中光照概念的更多详细介绍,请参阅本手册手册的 [灯光类型] 和 [全局照明] 部分。 属性 Type 灯光的当前类型。可选值有平行光 Directional、点光源 Point、聚光灯 Spot 和区域光 Area(这些类型的详细介绍请参阅 光照)。 Baking 当前灯光是否应该

  • 我有不同类别的图像的水平滚动视图。点击图像缩略图,它将显示该图像。现在点击缩略图需要显示图像和幻灯片视图。 怎么做?。现在我可以一次点击缩略图显示单个图像。我用毕加索来做这件事。 请帮帮我。我得到的数据(图像url)作为json响应从服务器。

  • 我有一个非常令人沮丧的问题,我不知道是什么问题。我构建了只包含GridView的简单XML。这个gridview应该显示从特定的URL下载的图像(ImageView ),我用我的代码检索这些图像。 因此,此应用程序的想法只是从URL下载图像并在网格视图中显示这些图像。首先,我必须说我正在使用通用图像加载器库。首先,请看一下我的获取视图代码: 问题: 上面的代码有效,它在GridView中显示图像。

  • 我试图将一个视图从右向左滑动,点击一个按钮,它的可见性就消失了,点击另一个按钮,它的可见性就消失了。我尝试了以下解决方案。但是它要求视图是可见的,并且它会将视图从一个位置滑动到另一个位置。我想要一个滑动效果,就像那样,但是要有。我怎样才能做到这一点?