【问题标题】:Android: Set placeholder image using Glide - DataBindingAndroid:使用 Glide - DataBinding 设置占位符图像
【发布时间】:2020-01-20 11:54:57
【问题描述】:

通过数据绑定加载图像很容易。我在我的项目中使用 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);
}

【问题讨论】:

  • 你想同时传递图片 url 和 placeholder 。这是你想要的吗?
  • 是的,我正在寻找那个

标签: android data-binding android-databinding


【解决方案1】:

发现这篇不错的文章:https://ayusch.com/databinding-with-glide-android/

我们还可以在绑定适配器中接受多个参数。例如,我们可能需要在加载图像时加载错误图像或占位符。

所以我认为听众就是答案。在链接失效的情况下也发布代码。

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}"

【讨论】:

    【解决方案2】:

    你可以像这样在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 和 Placeholder。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-23
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 2015-11-17
      • 2016-07-18
      相关资源
      最近更新 更多