5

对于启动画面,我使用包含白色背景的图像(纯白色 - 在 Photoshop 中检查)。由于某种原因,它显示了一个轻微的绿色背景与活动的默认白色背景 - 如屏幕截图中标记的那样。仅在某些设备中,例如

尽管图像使用白色,但 ImageView 图形现在显示为白色背景

我将此作为框架布局中的单个视图添加到活动中:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

<ImageView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scaleType="fitCenter"
    android:src="@drawable/splashscreen" />

</FrameLayout>

任何想法?我阅读了有关 RGB888 与 RGB565 的问题,但找不到合适的解决方案。

注意:我当然可以将图像中的白色更改为透明,但更愿意了解问题并找到适当的解决方案。

4

6 回答 6

9

这真的很烦人。我想知道为什么很少有人遇到这个问题,因为它应该出现在所有 32 位显示器上。

你提到了关于 RGB888 格式的权利。问题的原因是,无论 APK 文件中的原始位图格式如何,所有位图都被压缩(在我的情况下为索引 256 色!wtf?)。

我找不到阻止它的方法,所以如果有人知道正确的解决方案,请告诉。

但是,我找到了两种解决白色问题的方法。

1)每位图:假设我们有一个名为 的可绘制位图资源@drawable/mypng,这会导致问题。我们需要添加一个额外的 XML drawable drawable/mypng_nofilter.xml

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/mypng"
    android:filter="false"
/>

@drawable/mypng_nofilter改用。

2)对于整个活动:在活动onCreate方法中我们需要添加

getWindow().setFormat(PixelFormat.RGB_565);

现在窗口具有 16 位颜色深度,并且所有位图都显示为“正确”的白色。

同样,我更喜欢 32 位色深,但我不知道如何控制编译时图像压缩。

于 2012-05-29T10:54:18.947 回答
2

我已经通过将Bitmap.CompressFormat类型更改为PNG而不是解决了这个问题JPEG

Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.nouv);
Bitmap bitmap = (Bitmap)((BitmapDrawable) drawable).getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
于 2012-06-26T08:15:07.070 回答
0

我在网络加载的图像上遇到了同样的问题。我通过禁用位图过滤器解决了这个问题。由于我在 ICS 和更新的设备上没有这个问题,我只为 ICS 之前的设备关闭了位图过滤器。以下是我使用的代码(将网络加载的位图设置为 ImageView。)

BitmapDrawable bitmapDrawable = new BitmapDrawable(imageView.getContext().getResources(), bitmap);
bitmapDrawable.setFilterBitmap(false);
imageView.setImageDrawable(bitmapDrawable);
于 2013-08-30T11:36:33.720 回答
0

使用 Stackoverflow 中的所有解决方案后。从更改android:srcapp:srcCompact和许多其他解决方案。帮助我的是我的图像在drawable-anydpi内部,我将图像从drawable-anydpi 移动drawable,经过 2 小时的研究,它对我有用。

PS:它也可能对某人有帮助,这就是我把它放在这里的原因。:)

于 2020-03-28T11:11:51.243 回答
-1

由于您的图像中间只有一张图片,我建议您设置:

android:scaleType="centerCrop"

它会在左侧和右侧裁剪图片的某些部分,但会使用整个屏幕......

于 2012-05-07T16:16:17.193 回答
-1

您还可以使用图片的颜色(似乎是 F8FCF8)为 FrameLayout 或 ImageView 定义背景:

安卓:背景=“#F8FCF8”

于 2012-05-07T16:19:41.420 回答