14

我有一个内存中的位图(通过专有的 TCP/IP 协议栈从服务器应用程序下载),我想将其绑定到 ImageView。但是,我可以使用 setImageBitmap 手动绑定图像;如果我使用数据绑定库绑定其他控件,图像不会显示。如何使用数据绑定库绑定到包含 Bitmap 对象的属性?

4

2 回答 2

36

您应该可以使用 a 来做到这一点@BindingAdapter,例如:

@BindingAdapter("bind:imageBitmap")
public static void loadImage(ImageView iv, Bitmap bitmap) {
   iv.setImageBitmap(bitmap);
}

然后,在您的布局中,您ImageView将拥有bind:imageBitmap="@{...}", where...将是一个返回您的Bitmap.

于 2016-02-09T23:47:53.737 回答
5

您可以使用android.databinding.adapters.ImageViewBindingAdapter,它包含在数据绑定库中。

在您的视图模型或任何绑定到您的视图中,实现如下方法:

@Bindable
public Drawable getDrawable() {
    return new BitmapDrawable(context.getResources(), bitmap);
}

在您的 中ImageView,添加如下内容:

android:src="@{viewModel.drawable}"

显然,该viewModel变量必须已在您的布局中声明。

这是有效的,因为ImageViewBindingAdapter有这种方法:

@BindingAdapter("android:src")
public static void setImageDrawable(ImageView view, Drawable drawable) {
    view.setImageDrawable(drawable);
}
于 2017-03-06T22:06:59.707 回答