Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Basic Video Recorder control in monodroid MvvmCross (add to Tutorial.UI sample and navigate to the ViewModel)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res/Tutorial.UI.Droid"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<include
android:id="@+id/videoRecorder"
layout="@layout/videorecorder" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res/Tutorial.UI.Droid"
android:id="@+id/videoRecorder"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
local:MvxBind="{&apos;Text&apos;:{&apos;Path&apos;:&apos;FileName&apos;}}" />
<Button
android:text="Start"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/buttonStart" />
<VideoView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/videoViewRecorder" />
<Button
android:text="Stop"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/buttonStop" />
</LinearLayout>
using Android.App;
using Cirrious.MvvmCross.Binding.Droid.Views;
using Tutorial.Core.ViewModels.Lessons;
using Android.Widget;
using Android.Hardware;
using Android.Media;
namespace Tutorial.UI.Droid.Views.Lessons
{
[Activity]
public class VideoRecorderView
: MvxBindingActivityView<VideoRecorderViewModel>
{
Camera camera;
MediaRecorder mediaRecorder;
protected override void OnViewModelSet()
{
SetContentView(Resource.Layout.Page_VideoRecorderView);
Button buttonStart = ((Button)FindViewById<Button>(Resource.Id.buttonStart));
buttonStart.Click += new System.EventHandler(buttonStart_Click);
}
void buttonStart_Click(object sender, System.EventArgs e)
{
VideoView videoViewRecorder = ((VideoView)FindViewById<VideoView>(Resource.Id.videoViewRecorder));
if (mediaRecorder != null)
mediaRecorder.Reset();
else
mediaRecorder = new MediaRecorder();
if (camera == null)
{
camera = Camera.Open();
camera.Unlock();
}
mediaRecorder.SetCamera(camera);
mediaRecorder.SetAudioSource(AudioSource.Camcorder);
mediaRecorder.SetVideoSource(VideoSource.Camera);
CamcorderProfile cpHigh = CamcorderProfile.Get(CamcorderQuality.High);
mediaRecorder.SetProfile(cpHigh);
mediaRecorder.SetPreviewDisplay(videoViewRecorder.Holder.Surface);
System.Diagnostics.Debug.WriteLine("path:" + Android.OS.Environment.ExternalStorageDirectory + "/" + ViewModel.FileName + ".mp4");
mediaRecorder.SetOutputFile(Android.OS.Environment.ExternalStorageDirectory + "/" + ViewModel.FileName + ".mp4");
mediaRecorder.SetMaxDuration(50000); // 50 seconds
mediaRecorder.SetMaxFileSize(5000000); // Approximately 5 megabytes
mediaRecorder.Prepare();
mediaRecorder.Start();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cirrious.MvvmCross.ViewModels;
using System.Windows.Input;
using Cirrious.MvvmCross.Commands;
namespace Tutorial.Core.ViewModels.Lessons
{
public class VideoRecorderViewModel
: MvxViewModel
{
private string fileName="test";
public string FileName
{
get { return fileName; }
set { fileName = value; RaisePropertyChanged(() => FileName); }
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment