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

如何使用Glide加载数据绑定图像?

杨经武
2023-03-14

我正在尝试加载带有数据绑定的图像。但我一直没有忘记。我的问题在哪里?下面是我的代码和布局结构。

MyItemViewModel。kt

  @BindingAdapter("imageUrl")
    fun loadImage(view: RoundedImageView, url: String) = Glide.with(view.context).load(url).into(view)

布局xml

<data>

    <variable
            name="viewModel"
            type="com.myapp.app.ui.activity.albumlist.AlbumItemViewModel"/>
</data>

  <com.makeramen.roundedimageview.RoundedImageView
                android:layout_width="60dp"
                android:id="@+id/ivRoundedAlbum"
                android:layout_marginStart="@dimen/unit_20_dp"
                app:riv_corner_radius="8dp"
                app:imageUrl="@{viewModel.data.cover}"
                android:layout_height="60dp"/>

共有3个答案

夏侯野
2023-03-14

这工作对我来说很好

             <ImageView
                    android:layout_width="0dp"
                    android:layout_height="100dp"
                    android:layout_margin="10dp"
                    android:layout_gravity="center"
                    bind:image="@{subcategory.image}"
                    bind:placeholder="@{@drawable/no_imge}"
                    android:layout_weight="1" />




  @BindingAdapter("image","placeholder")
    fun setImage(image: ImageView, url: String?, placeHolder: Drawable) {

        if (!imageUrl.isNullOrEmpty()){

          Glide.with(image.context).load(url).centerCrop()
       .placeholder(R.drawable.no_imge)
                    .into(image)
        }
        else{
            image.setImageDrawable(placeHolder)
        }


    }
曾元忠
2023-03-14

BindingAdapter方法应该是静态的,因此在这种情况下将其标记为@JvmStatic会有所帮助。

但这会产生“编译时错误”,即“方法不能在类内是静态的”,因此应该将其移动到同伴对象或命名对象。

在你的例子中,你有一个类成员级别的方法,所以把它移动到同伴对象会有所帮助。所以对于MyItemViewModel。kt制作伴星对象,并在那里移动方法如下:

class MyItemViewModel{
    //Some code
    companion object {

        @JvmStatic
        @BindingAdapter("imageUrl")
        fun loadImage(view: RoundedImageView, url: String) { // This methods should not have any return type, = declaration would make it return that object declaration.
            Glide.with(view.context).load(url).into(view)
        }
    }
    //Some other code
}

注意:还可以使用=删除方法声明。绑定方法应该有返回类型单元

编辑:也可以使用方法Glide。按照@hmac在评论中的建议,使用(视图),但是。。。

使用此Glide.with(view)之前要考虑的事情:

>

在使用此方法之前考虑布局层次结构,因为不鼓励使用该方法的嵌套/大型层次结构布局过多。对于此类布局,效率会降低。

还要注意的是,如果视图位于非支持片段类中,或者上下文属于非支持片段,则会产生嘈杂的html" target="_blank">日志,如文档所示,在使用此方法之前,请先迁移到支持库(现在被认为是AndroidX)!

赏开宇
2023-03-14

您需要使url参数为空,并像这样防止为空:

@BindingAdapter("imageUrl")
fun loadImage(view: RoundedImageView, url: String?) {
    if (!url.isNullOrEmpty()) {
        .....
    }
}
 类似资料:
  • 我想使用Android数据绑定设置图像。我已经阅读了很多关于这方面的教程,但图片仍然没有出现。 在我的模型中,我有以下方法: 我还应该提到“III”、“Image-”url永远不会打印,所以问题不在于Glide。 这是我的xml: maleIcon是一个url字符串

  • 问题内容: 我们正在尝试将 图像预加载 到缓存中,以便稍后加载(图像位于应用程序的 Asset文件夹 中) 我们尝试了什么: 问题:仅当我们尝试加载/显示图像时才对它们进行缓存:必须先将它们加载到内存中,这样它们才能更快地显示出来。 我们还尝试使用GlideModule来增加CacheMemory的大小: 在清单中: 到目前为止没有任何工作。任何想法? 我们尝试使用不可见的1 dp imageVi

  • 我正在使用Glide库在imageview中加载图像,并使用以下代码。 灰色占位符在图像未加载之前可见,但在图像在imageview中加载后,占位符仍会出现,并在该图像后显示一些空白。 我如何解决这个问题。如果你有任何想法,请帮助我。

  • 我的Build.Gradle文件 UPD.这个简单的应用程序可以加载图片从互联网,但它不能加载图片从我的服务器。我的服务器的一些图片加载得很好,但其他的不是。我已经迷路了

  • 使用Glide将URL下载到非常容易: 我想知道我是否也可以下载到中?我想下载到原始位图中,然后我可以使用其他工具进行操作。我已经浏览了代码,但不知道如何操作。

  • 我可以在占位符中加载旋转动画的微调器,直到使用Glide加载图像吗? 我正在尝试使用占位符(R.Drawable.spinner)来实现这一点,没有动画出现? 如果有人能帮我,那太好了? 谢谢