【问题标题】:Android - Cannot set gallery image to ImageViewAndroid - 无法将图库图像设置为 ImageView
【发布时间】:2012-06-14 18:46:41
【问题描述】:

我浏览了大量帖子,但无法弄清楚为什么我不能让它发挥作用。我想要做的就是让用户单击一个打开画廊应用程序的按钮。然后用户选择一张图片,该图片会自动关闭图库并返回到我的应用程序,它会自动将该图片设置为 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 中没有加载任何图像。

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

【问题讨论】:

    标签: android imageview gallery image


    【解决方案1】:

    我认为 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);
            }
    
    }
    

    来自link

    【讨论】:

    • 哦,在这种情况下 requestCode == REQUEST_CODE 应该是 requestCode==SELECT_PICTURE...
    • 在我发布这个问题后,我意识到你刚才所说的并将代码更改为 SELECT_PICTURE。不幸的是,我仍然遇到同样的问题。它可以很好地加载图库,但是当我选择一张图片时,它会将我发送回我的应用程序,并且 ImageView 保持空白。我无法弄清楚为什么它不会设置图像。感谢您的帮助。
    • 我粘贴了您更新的代码,但问题仍然存在。它只是不会在 ImageView 中显示图片。感谢您帮助我解决这个问题!
    • 会不会是 XML 文件中的问题导致图像无法显示?如果我在 ImageView 中预加载图像,它可以正常工作。 ImageView 位于 ScrollView 内部的 LinearLayout 中。
    • 你能在“targetImage.setImageBitmap(bitmap);”后面加一个taost吗?使用 show() 并检查 ?
    【解决方案2】:

    您在 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); 
        }  
    

    【讨论】:

    • 感谢您的快速回复,但不幸的是它仍然无法正常工作。它加载画廊,让我选择一张图片就好了。选择照片后,它会回到我的应用程序,并且 ImageView 仍然是空白的。还有其他想法吗?
    猜你喜欢
    • 1970-01-01
    • 2014-06-24
    • 2017-07-24
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 2013-07-07
    相关资源
    最近更新 更多