3

我浏览了很多帖子,无法弄清楚为什么我不能让它工作。我想要做的就是让用户单击一个打开画廊应用程序的按钮。然后用户选择一张图片,它会自动关闭图库并返回到我的应用程序,它会自动将该图像设置为 ImageView。

到目前为止,我一直在工作,直到它回到我的应用程序。看起来一切都很好,但图像从未出现在 ImageView 中。

这是 ImageView 的 XML 代码:

<ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="14dp"
        android:layout_gravity="center_horizontal" />

在我的活动开始时,我将 ImageView 设置为:

 ImageView targetImage;

这是获取图像并将其设置到我的 ImageView 的其余代码。有一个按钮可以启动“setGunImage”。

public void setGunImage(View view) {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURE);
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (resultCode == RESULT_OK) {
        if (requestCode == SELECT_PICTURE) {
            targetImage = (ImageView)findViewById(R.id.imageView1);
            Uri selectedImageUri = data.getData();
            targetImage.setImageURI(selectedImageUri);
        }
    }
}

我已经在启用了 sd 卡的模拟器和加载到真实设备上的图像上对其进行了测试。两者都给出相同的行为。它通过图库步骤很好,但是当它返回到我的应用程序时,ImageView 中没有加载图像。

我尝试将数据更改为位图并进行设置,但它也从未出现过。我知道这可能是我没有看到的超级简单的事情,所以希望一双新的眼睛可以为我指明正确的方向。谢谢。

4

2 回答 2

2

我认为 Imran 解决方案应该可以正常工作........您也可以尝试这种方式

 @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            InputStream stream = null;
         if( resultCode==RESULT_OK)
           {
              if(requestCode==SELECT_PICTURE)
               {
                try {
                    // We need to recyle unused bitmaps
                    if (bitmap != null) {
                        bitmap.recycle();
                    }
                    stream = getContentResolver().openInputStream(data.getData());
                    bitmap = BitmapFactory.decodeStream(stream);

                                targetImage = (ImageView)findViewById(R.id.imageView1);
                    targetImage.setImageBitmap(bitmap);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } finally {
                    if (stream != null)
                        try {
                            stream.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                }
            super.onActivityResult(requestCode, resultCode, data);
        }

}

链接

于 2012-06-14T18:57:03.700 回答
1

您在 setImageURI 中传递 URI,因此首先使用MediaStore.Images.Media.DATA和 URI 获取图像路径,然后在 setImageURI 中传递图像路径。试试这种方式:

@Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if( resultCode==RESULT_OK)
        {
            if(requestCode==SELECT_PICTURE)
        {
            targetImage = (ImageView)findViewById(R.id.imageView1);
            Uri selectedImageUri = data.getData();
            String selectedImagePath=getPath(selectedImageUri);
            targetImage.setImageURI(selectedImageUri);
            }
        }
    }

    private String getPath(Uri uri)
        {    
        String[] projection={MediaStore.Images.Media.DATA}; 
        Cursor cursor=managedQuery(uri,projection,null,null,null);
        int column_index=cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
        cursor.moveToFirst(); 
        return cursor.getString(column_index); 
    }  
于 2012-06-14T18:53:59.787 回答