Xamarin Android从相机显示流
作者:互联网
我是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”中添加相机预览?
提前致谢!
解决方法:
您可以通过调用SetContentView来加载axml,即
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;
}
};
}
输出:
标签:textureview,android,xaml,xamarin,android-camera 来源: https://codeday.me/bug/20191013/1905643.html