有谁知道如何将 byte[] (图像)绑定到 axml 视图中的 Image 控件。我的 ViewModel 继承自 MvxViewModel。我所有的其他绑定都很好,但我找不到绑定该图像的方法。
2 回答
你可以更轻松地做到这一点,我在偶然发现这个问题后也发现了这一点:
由于用于为 a 设置位图的 Android 绑定ImageView
是Bitmap
(如您在 [1] 中看到的),您可以像这样配置您的视图:
<ImageView
local:MvxBind="Bitmap ByteArrayToImage(ImageByteArray)" />
然后您只需要定义一个名为 的 ValueConverter,ByteArrayToImageValueConverter
它将字节数组转换为 Bitmap 的一个实例。对我来说,使用 ValueConverter 是创建自定义绑定的首选方式;)
您已经有了将字节数组转换为位图的代码:BitmapFactory.DecodeByteArray(_rawImage, 0,_rawImage.Length);
我认为您可以使用自定义 UI 控件绑定它。
为此,您需要执行以下操作:
- 继承一个新
MyImageView
的ImageView
- 添加默认构造函数(将上下文和属性向下传递给基本构造函数)
向 中添加一个新
RawImage
属性MyImageView
,将其实现为:private byte[] _rawImage; public byte[] RawImage { get { return _rawImage; } set { _rawImage = value; if (_rawImage == null) return; var bitmap = BitmapFactory.DecodeByteArray(_rawImage, 0,_rawImage.Length); SetImageBitmap(bitmap); } }
MyImageView
然后,您可以在 axml 中使用该控件而不是普通的ImageView
.
注意 - 上面的代码未经测试 - 但一旦你在视图中获得 byte[],我相信你会弄清楚要使用的 Droid 代码。
作为对此的替代方法,您还可以使用自定义绑定将 a 绑定byte[]
到法线ImageView
- 请参阅In MvvmCross 如何执行自定义绑定属性中的自定义绑定示例