【问题标题】:ConstraintLayout Visibility Show not working after taking picture with camera用相机拍照后 ConstraintLayout Visibility Show 不工作
【发布时间】:2018-05-19 22:07:18
【问题描述】:

我需要拍照并显示在位于SelectedImageConstraintLayout 内的SelectedImageView 中。当我打开图库并选择一张图片时,它工作得很好,但它不适用于相机。 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);
}

这有什么问题?

【问题讨论】:

    标签: xamarin.android imageview android-camera visibility android-constraintlayout


    【解决方案1】:

    我发现使用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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-10
      • 1970-01-01
      • 2021-06-09
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多