我有一个工作的BindableViewPager(感谢Cheesebaron!),并且在viewpager控件中我为每个分页项目都有一个位图。我的viewpager视图模型包括
private double _bearing;
public double Bearing
{
get { return _bearing; }
set
{
_bearing = value;
RaisePropertyChanged(() => Bearing);
}
}
目的是动态地创建位图,使其成为反映轴承角度的图像。所以我使用值转换器将ImageView绑定到轴承:
<ImageView
...
local:MvxBind="Bitmap Bearing, Converter=BearingToImage" />
public class BearingToImageConverter : MvxValueConverter<double, byte[]>
{
protected override byte[] Convert(double value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Bitmap bmp = BitmapFactory.DecodeResource(Application.Context.ApplicationContext.Resources, Resource.Drawable.direction_pointer_black_bg);
byte[] bitmapData;
using (var stream = new MemoryStream())
{
bmp.Compress(Bitmap.CompressFormat.Png, 100, stream);
bitmapData = stream.ToArray();
}
return bitmapData;
}
}
有几行代码使用矩阵进行旋转,为清楚起见我省略了,因为代码在没有它的情况下也无法工作。
运行代码时,会调用转换器,但我收到警告:
MvxBind:Warning: 54.71 Value was not be a valid Bitmap
并且没有显示图像。看看PictureTaking示例,我看到绑定是使用InMemoryImage转换器直接对字节数组进行的。尝试以我的方式绑定是否有效,如果我需要使用自己的转换器,我是否需要做更多来模拟InMemoryImage转换?
已解决 ,并为回答我自己的问题而道歉,但为了将来的参考:
问题似乎是缺少InMemoryImage转换器。我现在返回一个对象,而不是让我的转换器返回一个byte [],这就是位图本身。
所以转换器签名变为:
public class BearingToImageConverter : MvxValueConverter<double, object> { ...
protected override object Convert(double value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { ////
返回的对象是位图。
答案 0 :(得分:0)
据我所知,你可以将字节数组绑定到ImageView但不能加倍,这就是你有这个警告的原因。我猜这就是你的自定义值转换器根本没有调用的原因。