对于闪屏我使用的图像包含白色背景(纯白色 - 在Photoshop中检查)。出于某种原因,它显示了一个轻微的绿色bg与活动的默认白色bg - 如屏幕截图所示。仅在某些设备中,例如
我将此作为单一视图添加到活动的框架布局中:
<?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问题,但找不到合适的解决方案。
注意:我确定可以将图像中的白色更改为透明,但更愿意了解问题并找到合适的解决方案。
答案 0 :(得分: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位颜色深度,但我不知道如何控制编译时图像压缩。
答案 1 :(得分: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);
答案 2 :(得分:0)
我在网络加载图像时遇到了同样的问题。我通过禁用位图过滤器解决了这个问题。由于我没有ICS和更新器件的问题,我只关闭了预ICS器件的位图滤波器。以下是我使用的代码(将网络加载的位图设置为ImageView。)
BitmapDrawable bitmapDrawable = new BitmapDrawable(imageView.getContext().getResources(), bitmap);
bitmapDrawable.setFilterBitmap(false);
imageView.setImageDrawable(bitmapDrawable);
答案 3 :(得分:0)
在使用Stackoverflow中的所有解决方案之后。
从将android:src
更改为app:srcCompact
以及许多其他解决方案。
帮助我的是,我的图像位于 drawable-anydpi 内部,并且将图像从 drawable-anydpi 移至了 drawable ,它对我有用经过2个小时的研究。
P.S:这也可能对某人有所帮助,这就是为什么我将其放在这里。 :)
答案 4 :(得分:-1)
由于您的图片中间只有一张图片,我建议您设置:
android:scaleType="centerCrop"
它会在左右两侧裁剪你图片的某些部分,但会使用整个屏幕......
答案 5 :(得分:-1)
您还可以使用图片的颜色(似乎是F8FCF8)为FrameLayout或ImageView定义背景:
机器人:背景= “#F8FCF8”