Android:使用 Glide - DataBinding 设置占位符图像
Android: Set placeholder image using Glide - DataBinding
通过数据绑定加载图片很简单。我在我的项目中使用 Glide。我必须设置占位符图像,它会根据用户的某些选择而改变。我们可以使用一些接受 imageurl 和 placeHolder 图像引用的表达式吗?
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/vehicle_1_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_twenty"
app:layout_constraintEnd_toEndOf="@id/centerGuideline"
app:layout_constraintStart_toStartOf="@id/centerGuideline"
app:layout_constraintTop_toBottomOf="@id/txt_enter_vehicle_name"
app:loadImage="@{viewModel.imgUrl}" />
@BindingAdapter({"loadImage"})
public static void loadUrlImage(ImageView view, String url, int placeHolderImage){
ImageLoaderUtil.getInstance().loadImageWithCache(view, url, placeHolderImage);
}
public void loadImageWithCache(ImageView imageView, String url, int placeholderImage) {
Glide.with(imageView.getContext())
.load(url)
.apply(getDefaultGlideOptions())
.diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
.placeholder(placeholderImage)
.into(imageView);
}
您可以像这样在BindingAdapter
中添加多个参数。
@BindingAdapter("url","placeHolderImage")
public static void loadUrlImage(ImageView view, String url, int placeHolderImage)
{
ImageLoaderUtil.getInstance().loadImageWithCache(view, url, placeHolderImage);
}
而且您必须像这样在 Imageview
xml 中添加字段。
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/vehicle_1_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_twenty"
app:layout_constraintEnd_toEndOf="@id/centerGuideline"
app:layout_constraintStart_toStartOf="@id/centerGuideline"
app:layout_constraintTop_toBottomOf="@id/txt_enter_vehicle_name"
app:url="@{viewModel.imgUrl}"
app:placeHolderImage="@{viewModel.}"
/>
你已经通过了两个东西 xml Url 和占位符。
找到这篇不错的文章:https://ayusch.com/databinding-with-glide-android/
We can also accept multiple arguments in our bindingadapter. For example, one may need to load an error image, or a placeholder while our image loads.
所以我认为听众就是答案。还发布代码以防 link 已死。
companion object {
@JvmStatic
@BindingAdapter(value = ["profileImage", "error"], requireAll = false)
fun loadImage(view: ImageView, profileImage: String, error: Int) {
Glide.with(view.context)
.load(profileImage)
.listener(object : RequestListener<Drawable> {
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target<Drawable>?,
isFirstResource: Boolean
): Boolean {
view.setImageResource(error)
return true
}
override fun onResourceReady(
resource: Drawable?,
model: Any?,
target: Target<Drawable>?,
dataSource: DataSource?,
isFirstResource: Boolean
): Boolean {
view.setImageDrawable(resource)
return true
}
})
.into(view)
}
}
在您的布局中:
app:error="@{user.errorImage}"
通过数据绑定加载图片很简单。我在我的项目中使用 Glide。我必须设置占位符图像,它会根据用户的某些选择而改变。我们可以使用一些接受 imageurl 和 placeHolder 图像引用的表达式吗?
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/vehicle_1_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_twenty"
app:layout_constraintEnd_toEndOf="@id/centerGuideline"
app:layout_constraintStart_toStartOf="@id/centerGuideline"
app:layout_constraintTop_toBottomOf="@id/txt_enter_vehicle_name"
app:loadImage="@{viewModel.imgUrl}" />
@BindingAdapter({"loadImage"})
public static void loadUrlImage(ImageView view, String url, int placeHolderImage){
ImageLoaderUtil.getInstance().loadImageWithCache(view, url, placeHolderImage);
}
public void loadImageWithCache(ImageView imageView, String url, int placeholderImage) {
Glide.with(imageView.getContext())
.load(url)
.apply(getDefaultGlideOptions())
.diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
.placeholder(placeholderImage)
.into(imageView);
}
您可以像这样在BindingAdapter
中添加多个参数。
@BindingAdapter("url","placeHolderImage")
public static void loadUrlImage(ImageView view, String url, int placeHolderImage)
{
ImageLoaderUtil.getInstance().loadImageWithCache(view, url, placeHolderImage);
}
而且您必须像这样在 Imageview
xml 中添加字段。
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/vehicle_1_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_twenty"
app:layout_constraintEnd_toEndOf="@id/centerGuideline"
app:layout_constraintStart_toStartOf="@id/centerGuideline"
app:layout_constraintTop_toBottomOf="@id/txt_enter_vehicle_name"
app:url="@{viewModel.imgUrl}"
app:placeHolderImage="@{viewModel.}"
/>
你已经通过了两个东西 xml Url 和占位符。
找到这篇不错的文章:https://ayusch.com/databinding-with-glide-android/
We can also accept multiple arguments in our bindingadapter. For example, one may need to load an error image, or a placeholder while our image loads.
所以我认为听众就是答案。还发布代码以防 link 已死。
companion object {
@JvmStatic
@BindingAdapter(value = ["profileImage", "error"], requireAll = false)
fun loadImage(view: ImageView, profileImage: String, error: Int) {
Glide.with(view.context)
.load(profileImage)
.listener(object : RequestListener<Drawable> {
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target<Drawable>?,
isFirstResource: Boolean
): Boolean {
view.setImageResource(error)
return true
}
override fun onResourceReady(
resource: Drawable?,
model: Any?,
target: Target<Drawable>?,
dataSource: DataSource?,
isFirstResource: Boolean
): Boolean {
view.setImageDrawable(resource)
return true
}
})
.into(view)
}
}
在您的布局中:
app:error="@{user.errorImage}"