Xamarin纹理查看相机流大小

时间:2017-03-25 17:52:15

标签: c# android image xamarin.android android-camera

我创建了一个从相机流式传输数据的应用程序,以便让用户拍照,比如SnapChat。 但是有一个错误,每当我把照片发送给另一个活动来展示它时,一切都很好,直到这一点。但是当我回到第一个活动时,似乎纹理视图的大小已经改变了。

我拍了一些截图给你们看

此图显示了流(Firts Activity),然后是图片的结果(Second Activity)

Picture 1

但是当你回到第一次活动时,这会发生:

Picture 2

为什么会这样?

这是我正在使用的代码:

Android.Hardware.Camera _camera;
        TextureView _textureView;
        Button TakePictureBtn;
        Bitmap UserPicture;
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Main);
            _textureView = FindViewById<TextureView>(Resource.Id.textureView);
            _textureView.SurfaceTextureListener = this;
            TakePictureBtn = FindViewById<Button>(Resource.Id.takePhotoButton);
            TakePictureBtn.Click += TakePicture_Click;
        }

        private void TakePicture_Click(object sender, EventArgs e)
        {
            _camera.TakePicture(null, null, this);         
        }

        public void OnSurfaceTextureAvailable(Android.Graphics.SurfaceTexture surface, int w, int h)
        {
            _camera = Android.Hardware.Camera.Open();
            Android.Hardware.Camera.Parameters param = _camera.GetParameters();
            IList<Android.Hardware.Camera.Size> supportedSizes = param.SupportedPictureSizes;
            Android.Hardware.Camera.Size sizePicture = supportedSizes[10];
            param.SetPictureSize(sizePicture.Width, sizePicture.Height);
            _camera.SetParameters(param);
            var previewSize = _camera.GetParameters().PreviewSize;
            _textureView.LayoutParameters = 
                new FrameLayout.LayoutParams(h, w, GravityFlags.Center);
            try
            {
                _camera.SetPreviewTexture(surface);
                _camera.StartPreview();
            }
            catch (Java.IO.IOException ex)
            {
                Console.WriteLine(ex.Message);
            }
            _textureView.Rotation = 90.0f;
        }

        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)
        {

        }

重要的是Say That如果我从这个错误的第一次活动中拍摄另一张照片,第二个活动会显示出一幅好照片(一如既往),如果我回到第一个活动,那么它再次正常工作,但如果我再拿另一个一个,我回去再坏,等等。

另外我想说我使用AlcaltelPOP2来调试我的应用程序,但是当我使用其他手机(华硕)时,Stream看起来很奇怪,就像重力线不起作用一样!

最后,如果您注意到第二个活动顶部的黑色Gap大于第一个活动的黑色Gap,那么这就是axml代码。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ImageView
        android:src="@android:drawable/ic_menu_gallery"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginBottom="-30dp"
        android:id="@+id/imageView1" />
    <Button
        android:id="@+id/BtnSendPicture"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_gravity="bottom|right"
        android:layout_marginRight="25dp"
        android:layout_marginBottom="25dp"
        android:background="@drawable/SendButton" />
</FrameLayout>

很容易说这是由于行android:layout_marginBottom="-30dp",但问题是如果我擦除这行代码然后在buttom中出现一个小灰线,为什么会发生这种情况是图像视图有这条线

android:layout_width="fill_parent"
android:layout_height="fill_parent"

感谢。

0 个答案:

没有答案