Xamarin Android Отображение потока с камеры

Я новичок в Xamarin, и я пытаюсь реализовать поток моей камеры в макете xaml. Этот пример Xamarin установит полный текстур как макет, поэтому я не могу добавить некоторые дополнительные функции, такие как кнопки и т.д.

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>

Может ли кто-нибудь помочь мне добавить предварительный просмотр камеры в "textureView1" макета xaml?

Заранее спасибо!

+1
источник поделиться
1 ответ

Вы можете загрузить свой axml по вызову SetContentView, т.е.

SetContentView(Resource.Layout.CameraLayout);

Примечание: это предполагает, что ваш axml в папке Layout является именем 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

+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос