如何使用mvvmcross vnext在视图中显示使用相机拍摄的照片?

时间:2013-02-15 12:20:30

标签: android camera imageview xamarin.android mvvmcross

我能够访问相机并拍照(使用PictureChooser插件),它将图片存储在android的图片库中,我只是想在屏幕上显示并删除它(我不需要商店图片) 我怎样才能做到这一点 ? (欢迎几行代码:))谢谢!

ps:也许使用mvvmcross的文件插件?

编辑:感谢您的回答,我认为对我来说最好的方法是做一个自定义绑定将byte []绑定到普通的ImageView,我看到了自定义绑定的示例(textview和按钮),我试着做我的。

namespace Testa.Droid.Bindings
{
    class PictureBinding : MvxBaseAndroidTargetBinding
    {
        private readonly ImageView _imageView;

        public PictureBinding(ImageView imageView)
        {
            _imageView = imageView;
        }

        public override MvxBindingMode DefaultMode
        {
            get { return MvxBindingMode.OneWay; }
        }

        public override Type TargetType
        {
            get { return typeof (byte[]); }
        }

        public override void SetValue(object value)
        {
            var memoryStream = new MemoryStream((byte[])valyue);
            Bitmap bitmap = BitmapFactory.DecodeStream(memoryStream);
            _imageView.SetImageBitmap(bitmap);
        }
    }
}

在Setup.cs中

protected override void FillTargetFactories(Cirrious.MvvmCross.Binding.Interfaces.Bindings.Target.Construction.IMvxTargetBindingFactoryRegistry registry)
    {
        base.FillTargetFactories(registry);

        registry.RegisterFactory(new MvxCustomBindingFactory<ImageView>("Picture", (imageView) => new PictureBinding(imageView)));
    }

在我的ViewModel中,我有:

 public byte[] ImageData {
    get { return _imageData; }
    set { _imageData = value; RaisePropertyChanged(() => ImageData); }
 }

现在我认为我不知道如何使用这种自定义绑定

<ImageView
  android:id="@+id/image"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content" 
  local:MvxBind="Picture ??, Mode=TwoWay" />

mvvcross vNext | monodroid

1 个答案:

答案 0 :(得分:0)

将图像上传到网络服务的内容已在uploading photo to a webservice with mvvmcross and mono touch

中介绍

Take/Select picture and show it in ImageView without saving first (using MvvmCross)

中介绍了在ImageView中显示图像

要查找这些匹配,我使用了StackOverflow搜索框,其中包含“mvvmcross”和“picture” - https://stackoverflow.com/search?q=mvvmcross+picture


更新后更新(请尽量不要这样做 - 请尝试提出新问题 - 您可以随时交叉引用它们。)

我已经更新了更新中的绑定代码 - 它有字符串和Streams以及byte [] - 所以我把所有内容都放到了byte []级别,然后添加了一个byte []属性视图模型。

要使用绑定,您现在应该可以使用:

 <ImageView
     android:layout_width="200dp"
     android:layout_height="200dp"
     local:MvxBind="Picture ImageBytes"
     />

请注意,您不需要TwoWay - TwoWay用于View需要向ViewModel发送更改时 - 例如当用户在文本框中输入文本时。