使用相机拍照后,ConstraintLayout Visibility Show 不起作用

ConstraintLayout Visibility Show not working after taking picture with camera

我需要拍照并显示在 SelectedImageConstraintLayout 里面的 SelectedImageView 中。当我打开画廊和 select 一张照片时,它工作得很好,但它不适用于相机。 SelectedImageConstraintLayout 根本不可见。

void OpenCamera()
{
    Intent intent = new Intent(MediaStore.ActionImageCapture);
    var filename = new File(this.ViewModel.IssuePhotosDirPath,
                            this.ViewModel.TEMP_PHOTO_FILENAME);
    intent.PutExtra(MediaStore.ExtraOutput, Uri.FromFile(filename));
    StartActivityForResult(intent, OPEN_CAMERA_ID);
}

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
    base.OnActivityResult(requestCode, resultCode, data);
    if (resultCode == Result.Ok)
    {
        var issuePhotoFilename = System.IO.Path.Combine(this.ViewModel.IssuePhotosDirPath,
                                                        this.ViewModel.TEMP_PHOTO_FILENAME);

        switch(requestCode)
        {
            case OPEN_CAMERA_ID:
                ShowIssueImage(issuePhotoFilename);
                break;
            case OPEN_GALLERY_ID:
                //do something to save the image in temp file before showing it
                ShowIssueImage(issuePhotoFilename);
                break;
        }
    }
}

void ShowIssueImage(string fileName)
{
     if (SelectedImageViewWidth > 0 && SelectedImageViewHeight > 0)
     {
          var bitmap = fileName.ResizeAndRotate(SelectedImageViewWidth, SelectedImageViewHeight);
          SelectedImageView.SetImageBitmap(bitmap);
          bitmap = null;
     }
     else
     {  
          SelectedImageView.SetImageBitmap(BitmapFactory.DecodeFile(fileName));
     }

     AddImageConstraintLayout.Visibility = ViewStates.Gone;
     SelectedImageConstraintLayout.Visibility = ViewStates.Visible;
}

void RemoveIssueImage()
{
     SelectedImageConstraintLayout.Visibility = ViewStates.Gone;
     AddImageConstraintLayout.Visibility = ViewStates.Visible;

     var issuePhotoFilename = System.IO.Path.Combine(this.ViewModel.IssuePhotosDirPath, this.ViewModel.TEMP_PHOTO_FILENAME);
     System.IO.File.Delete(issuePhotoFilename);
}

这有什么问题吗?

我发现使用 ViewState.Invisible 而不是 ViewStates.Gone 可以解决它。虽然我不知道为什么 ViewState.Gone 可以从图库中挑选图像。

void RemoveIssueImage()
{
     //Here, I need to change it from ViewStates.Gone to ViewStates.Invisible
     SelectedImageConstraintLayout.Visibility = ViewStates.Invisible;

     AddImageConstraintLayout.Visibility = ViewStates.Visible;

     var issuePhotoFilename = System.IO.Path.Combine(this.ViewModel.IssuePhotosDirPath, this.ViewModel.TEMP_PHOTO_FILENAME);
     System.IO.File.Delete(issuePhotoFilename);
}

及稍后在 ShowIssueImage 函数中,将 AddImageConstraintLayout.Visibility 更改为 ViewStates.Invisible