对话框中的ImageView -Xamarin

时间:2017-07-03 16:21:45

标签: c# android xamarin

我正在尝试将图像保存到我的firebase数据库中。我使用对话框保存我的数据。我现在想要的是,我想通过点击按钮添加图像,然后从我的图库中选择图片。现在我希望照片的路径显示在对白而不是图像本身。将路径保存到firebase并将图像本身检索到另一个活动的imageview中。

请问有哪些示例代码?

1 个答案:

答案 0 :(得分:0)

  

我想通过点击按钮添加图片,然后从我的图库中选择图片。

使用选择器从图库中选择图像:

private void BtnClick_Click(object sender, System.EventArgs e)
{
    Intent intent = new Intent();
    intent.SetType("image/*");
    intent.SetAction(Intent.ActionGetContent);
    StartActivityForResult(Intent.CreateChooser(intent, "Select Picture"), 0);
}
  

我希望照片的路径显示在对白而不是图像本身。将路径保存到firebase并将图像本身检索到另一个活动的imageview中。

通过使用选择器,您可以从OnActivityResult

中检索内容网址
protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
{
     Android.Net.Uri uri = data.Data;
     string realFilePath=GetRealFilePath(uri);
     //post the realFilePath to Firebase here

     //store realFilePath locally to pass it to other activity
}

要在Firebase中存储图像的路径,您需要使用以下代码将内容网址转换为文件的实际路径:

public string GetRealFilePath(Uri uri)
{
    var isDocumentUri = DocumentsContract.IsDocumentUri(this, uri);
    if (isDocumentUri)
    {
        string id = DocumentsContract.GetDocumentId(uri);
        string[] split = id.Split(':');
        string type = split[0];
        if (IsMediaDocument(uri))
        {
            Uri contentUri = null;
            if ("image".Equals(type))
            {
                contentUri = MediaStore.Images.Media.ExternalContentUri;
                string selection = "_id=?";
                string[] selectionArgs = new string[] { split[1] };
                string filePath = GetDataColumn(this, contentUri, selection, selectionArgs);
                return filePath;
            }
        }
    }else
    {
      //when select the file directly from gallery, `isDocumentUri` will be false.
      var contentUri = MediaStore.Images.Media.ExternalContentUri;
      var selection = "_id=?";
      string[] selectionArgs = new string[] { uri.LastPathSegment };
      string filePath = GetDataColumn(this, contentUri, selection, selectionArgs);
      return filePath;
    }
    return null;
}

public  string GetDataColumn(Context context, Uri uri, string selection,string[] selectionArgs)
{

    ICursor cursor = null;
    string column = "_data";
    string[] projection = {
        column
    };

    try
    {
        cursor = ContentResolver.Query(uri, projection, selection, selectionArgs,
                null);
        if (cursor != null && cursor.MoveToFirst())
        {
            int column_index = cursor.GetColumnIndexOrThrow(column);
            return cursor.GetString(column_index);
        }
    }
    finally
    {
        if (cursor != null)
            cursor.Close();
    }
    return null;
}

public static bool IsMediaDocument(Uri uri)
{
    return "com.android.providers.media.documents".Equals(uri.Authority);
}