android - supported - mvvmcross videoview enlace URL
mvvmcross xamarin forms (1)
MvvmCross es muy flexible. Lo que está pidiendo no es algo que esté incorporado, pero puede ampliar MvvmCross para agregar soporte para él.
MvvmCross tiene lo que se llama constructores vinculantes. Aquí es donde registra enlaces de destino personalizados. Un enlace toma un tipo, como VideoView , y un nombre de propiedad como " VideoUri" .
Cuando MvvmCross ve un atributo vinculante como: local:MvxBind="VideoUri MyVideoUri"
tomará el valor de propiedad de MyVideoUri , luego llamará al enlace personalizado, que ulitivamente llamará a videoView.SetVideoURI()
.
Estos son los pasos que debe seguir.
1) En su proyecto de Android, edite Setup.cs y agregue lo siguiente para registrar su creador de enlaces personalizado.
protected override MvxAndroidBindingBuilder CreateBindingBuilder()
{
return new MyAndroidBindingBuilder();
}
2) Cree un generador de enlaces personalizado que subclasifique el creador de enlaces de Android predeterminado:
public class MyAndroidBindingBuilder : MvxAndroidBindingBuilder
{
protected override void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry)
{
base.FillTargetFactories(registry);
registry.RegisterCustomBindingFactory<VideoView>("VideoUri",
videoView => new MvxVideoViewUriTargetBinding(videoView));
}
}
3) Cree un enlace de destino personalizado para el tipo VideoView y la propiedad "VideoUri":
public class MvxVideoViewUriTargetBinding : MvxAndroidTargetBinding
{
public MvxVideoViewUriTargetBinding(object target) : base(target)
{
}
public override Type TargetType
{
get { return typeof (string); }
}
protected override void SetValueImpl(object target, object value)
{
var videoView = (VideoView) target;
videoView.SetVideoURI(Uri.Parse((string)value));
}
}
Para usarlo en su diseño, simplemente cree lo siguiente:
1) En su layout.xml
<VideoView
android:id="@+id/SampleVideoView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
local:MvxBind="VideoUri MyVideoUri" />
2) En su ViewModel , agregue una propiedad para MyVidoeUri
public string MyVideoUri
{
get { return "http://ia600507.us.archive.org/25/items/Cartoontheater1930sAnd1950s1/PigsInAPolka1943.mp4"; }
}
3) En tu Vista , puedes comenzar el video así:
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.MyLayout);
// SetVideoURI() already called via binding
var videoView = FindViewById<VideoView>(Resource.Id.SampleVideoView);
videoView.Start();
}
Mire la fuente de MvxAndroidBindingBuilder para ver los enlaces actuales. https://github.com/MvvmCross/MvvmCross/blob/bbf9a2ac76e74d9404f4b57036c6e29dfe2cc6c3/Cirrious/Cirrious.MvvmCross.Binding.Droid/MvxAndroidBindingBuilder.cs
Espero que esto ayude.
Soy nuevo en MVVMCross y actualmente estoy luchando con un problema vinculante. Intentando enlazar la URL de un video con el componente VideoView en Android.
- ¿Hay alguna etiqueta Mvx.MvxBind que pueda hacerlo automáticamente?
- De lo contrario, ¿cómo puedo pasar la URL de MvxViewModel a MvxActivity?
Si la primera opción no es posible, intentaré obtener la URL y reproducir el video como se explica aquí: http://developer.xamarin.com/recipes/android/media/video/play_video/
Gracias por adelantado.