【问题标题】:ImageView not displaying some imagesImageView 不显示某些图像
【发布时间】:2015-04-03 10:52:58
【问题描述】:

我正在尝试在 AndroidImageView 中显示图像,但由于未知原因,某些图像未显示。工作的图像相对较小,而不工作的图像较大(1280x720)左右。我什至尝试通过在 .xml 文件中甚至通过代码添加 maxWidth 或 maxHeight 来限制图像的大小,但仍然没有结果。

这是我的 ImageView 的 .xml 代码;

<ImageView
            android:id="@+id/imageImageView"
            android:layout_width="fill_parent"
            android:maxHeight="100dp"
            android:maxWidth="100dp"
            android:layout_height="wrap_content"
            android:contentDescription="@string/empty"
            android:gravity="center"
            android:src="@drawable/test3" />

对于我的代码:

ImageView imageView = (ImageView) view
                .findViewById(R.id.imageImageView);
        imageView.requestLayout();
        imageView.getLayoutParams().height = 100;
        imageView.getLayoutParams().width = 100;

有什么想法/建议吗?谢谢。

【问题讨论】:

  • 不工作怎么办?添加 android:scaleType="centerInside" 看看有没有显示出来。
  • 不工作,因为当我尝试插入更大的图像时没有显示任何内容。我将添加该行,看看会发生什么。
  • 不,仍然没有显示。
  • 如果从 ImageView 中删除 maxHeight 和 maxWidth 属性会发生什么?有用吗?
  • 不,这是最初的尝试。我只是添加了这一行,希望它能解决问题,但没有成功。

标签: android android-imageview


【解决方案1】:

尝试像这样调整图像大小:

private Drawable resize(Drawable image) {
    Bitmap bitmap = ((BitmapDrawable) image).getBitmap();
    Bitmap bitmapResized = Bitmap.createScaledBitmap(bitmap,
            (int) (bitmap.getWidth() * 0.5), (int) (bitmap.getHeight() * 0.5), false);
    return new BitmapDrawable(getResources(), bitmapResized);
}

在你的片段的 onCreateView() 中:

ImageView imageView = (ImageView) view
                .findViewById(R.id.imageImageView);
        imageView.setImageResource(0);
        Drawable draw = getResources().getDrawable(R.drawable.test3);
        draw = resize(draw);
        imageView.setImageDrawable(draw);

【讨论】:

  • 我有同样的问题并尝试了上述解决方案,但它在 setImageResource(0) 上崩溃并出现空资源异常。然后我注释掉了这一行并再次尝试。它再次崩溃,出现错误“java.lang.ClassCastException:android.graphics.drawable.NinePatchDrawable 无法转换为 android.graphics.drawable.BitmapDrawable”。
  • 这个解决方案对我有用。我有一个 ImageView,它可以完美地显示在我的应用程序中的任何地方,除了片段内部。烦人这是必要的,谁能解释为什么需要它?
【解决方案2】:

前段时间我遇到了同样的问题,我的解决方案是检查图像命名约定示例(“-”到“_”,名称中没有空格,... ) 您可以查看 java 命名约定以获取更多信息。

【讨论】:

    【解决方案3】:

    试试这个: 在图像视图的 xml 代码中添加这两行:

    android:scaleType="fitXY"
    android:adjustViewBounds="true"
    

    【讨论】:

    • 谢谢,结果还是一样。
    【解决方案4】:
    <ImageView
                android:id="@+id/imageImageView"
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:contentDescription="@string/empty"
                android:src="@drawable/test3" />
    

    试试这个:)

    【讨论】:

    • 谢谢回复,这个方法我已经试过了,没有成功。
    【解决方案5】:

    对我来说,我遇到了这个错误

    W/OpenGLRenderer: Bitmap too large to be uploaded into a texture (2250x4386, max=4096x4096)
    

    我的图像大小实际上是 750x1462,但因为它位于 drawable-mdpi res 存储桶中,所以我认为它在幕后被放大了,所以我将它移动到 xxhdpi,然后它毫无问题地加载了图像。

    【讨论】:

      【解决方案6】:

      这可能来得有点晚。我认为文件名也可能是一个问题。我刚刚在 Android Studio 和 Boom 的可绘制文件夹中将我的 sebastian-staines-mfzdRsWsiRA-unsplash.jpg 重命名为 sebastian_staines.jpg,Imageview 显示了它。 希望这对其他人有帮助

      【讨论】:

      • 此答案仅适用于您的特定用例,因此通常不可接受