我正在努力学习DataBinding
并坚持一个问题。在使用GLide加载图像时,我无法显示进度。以下是我的代码。
@BindingAdapter("android:src")
public static void loadImage(ImageView view, String url){
if(!TextUtils.isEmpty(url))
Glide.with(view).load(url).into(view);
}
@BindingAdapter({"android:src","progressBar"})
public static void loadImage(ImageView view, String url, ProgressBar progressBar){
if(!TextUtils.isEmpty(url))
Glide.with(view).load(url)
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
progressBar.setVisibility(View.GONE);
return false;
}
})
.into(view);
}
我称之为:
@Override
public Object instantiateItem(ViewGroup container, final int position) {
LayoutInflater lp = LayoutInflater.from(container.getContext());
ItemImageSliderBinding itemBinding = ItemImageSliderBinding.inflate(lp, container, false);
container.addView(itemBinding.getRoot());
itemBinding.setImageUrl(images.get(position));
itemBinding.executePendingBindings();
return itemBinding.getRoot();
}
正如您所看到的,有两个重载方法loadImage
但我想使用第二个来显示进度。我怎样才能做到这一点 。可能还有一些其他优雅的方式来做到这一点。但我无法弄清楚它是什么。目前我的布局如下所示。
<layout>
<data>
<variable
name="imageUrl"
type="String" />
</data>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@{imageUrl}" />
<ProgressBar
android:id="@+id/progressImageSlider"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
/>
</LinearLayout>
如何将ProgressBar
与BindingAdapter
绑定以加载图片?
答案 0 :(得分:2)
如果你想使用第二种方法:
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:progressBar="@{progressImageSlider}"
android:src="@{imageUrl}" />
但我认为你应该在这种情况下使用占位符,请参阅我的例子
@BindingAdapter(value = { "android:src", "placeholder" }, requireAll = false)
public static void loadImage(ImageView view, String url, Drawable placeHolder) {
if (!TextUtils.isEmpty(url)) {
Glide.with(view.getContext()).load(url).placeholder(placeHolder).into(view);
}
}
并在你的xml中调用它
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:placeholder="@{@drawable/your_place_holder}"
android:src="@{imageUrl}" />
希望这有帮助!