我创建了一个从相机流式传输数据的应用程序,以便让用户拍照,比如SnapChat。 但是有一个错误,每当我把照片发送给另一个活动来展示它时,一切都很好,直到这一点。但是当我回到第一个活动时,似乎纹理视图的大小已经改变了。
我拍了一些截图给你们看
此图显示了流(Firts Activity),然后是图片的结果(Second Activity)
但是当你回到第一次活动时,这会发生:
为什么会这样?
这是我正在使用的代码:
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"
感谢。