我正在尝试加载带有数据绑定的图像。但我一直没有忘记。我的问题在哪里?下面是我的代码和布局结构。
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"/>
这工作对我来说很好
<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)
}
}
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)!
您需要使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)来实现这一点,没有动画出现? 如果有人能帮我,那太好了? 谢谢