我是Xamarin的新手,我尝试将我的相机流实现为xaml布局。 这个Xamarin的例子将完整的textureview设置为布局,所以我无法添加一些额外的功能,如按钮等。
https://developer.xamarin.com/recipes/android/other_ux/textureview/display_a_stream_from_the_camera/
using System;
using Android.App;
using Android.OS;
using Android.Views;
using Android.Widget;
using Android.Hardware;
using static Android.App.ActionBar;
namespace TextureViewCameraStream
{
[Activity (Label = "TextureViewCameraStream", MainLauncher = true)]
public class Activity1 : Activity, TextureView.ISurfaceTextureListener
{
Camera _camera;
TextureView _textureView;
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
_textureView = new TextureView(this);
_textureView.SurfaceTextureListener = this;
SetContentView(_textureView);
}
public void OnSurfaceTextureAvailable (Android.Graphics.SurfaceTexture surface, int w, int h)
{
_camera = Camera.Open ();
_textureView.LayoutParameters = new FrameLayout.LayoutParams (w, h);
try {
_camera.SetPreviewTexture (surface);
_camera.StartPreview ();
} catch (Java.IO.IOException ex) {
Console.WriteLine (ex.Message);
}
}
public bool OnSurfaceTextureDestroyed (Android.Graphics.SurfaceTexture surface)
{
_camera.StopPreview ();
_camera.Release ();
return true;
}
public void OnSurfaceTextureSizeChanged (Android.Graphics.SurfaceTexture surface, int width, int height)
{
// camera takes care of this
}
public void OnSurfaceTextureUpdated (Android.Graphics.SurfaceTexture surface)
{
}
}
}
例如我的布局必须是:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:text="Button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button1" />
<TextureView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textureView1"
android:layout_marginTop="0.0dp" />
</LinearLayout>
有人可以帮我在布局xaml的“textureView1”中添加相机预览吗?
提前致谢!
答案 0 :(得分:1)
您可以通过致电axml
加载SetContentView
,即
SetContentView(Resource.Layout.CameraLayout);
注意:这假设您在Layout文件夹中的axml是名称CameraLayout.xml(.axml)。
public class Activity1 : Activity
{
bool _previewing;
Camera _camera;
TextureView _textureView;
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
SetContentView(Resource.Layout.CameraLayout);
Button button = FindViewById<Button>(Resource.Id.button1);
_textureView = FindViewById<TextureView>(Resource.Id.textureView1);
button.Click += delegate {
try
{
if (!_previewing)
{
_camera = Camera.Open();
_camera.SetPreviewTexture(_textureView.SurfaceTexture);
_camera.StartPreview();
}
else
{
_camera.StopPreview();
_camera.Release();
}
}
catch (Java.IO.IOException ex)
{
Console.WriteLine(ex.Message);
}
finally
{
_previewing = !_previewing;
}
};
}
输出: