其他分享
首页 > 其他分享> > Xamarin Android从相机显示流

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;
            }
        };
    }

输出:

enter image description here

标签:textureview,android,xaml,xamarin,android-camera
来源: https://codeday.me/bug/20191013/1905643.html