Android中的Mach Banding图像

时间:2010-11-07 19:18:35

标签: android

我使用线性渐变图像作为背景,而在Photoshop(以及其他所有内容)中,它看起来很漂亮,但是当我在模拟器中显示它时被绑定了!更糟糕的是,它被绑在我的实际手机上 - 一个Droid Incredible。我在模拟和手机上都运行2.2。

以下是一个示例 - 左侧是原始版本,右侧是Android版本:http://pnart.com/temp/AndroidMach.jpg

这有Android的外观强加一些深度限制。发生了什么,我该如何解决?

提前致谢!

5 个答案:

答案 0 :(得分:2)

我遇到了同样的问题并在Google上进行了一些搜索。我找到的其中一个网站建议我将渐变图像放在res / raw /中并在需要时加载图像。我试过这个并且它有效。

根据我的理解,您放置在“可绘制”下的任何图像都将由AAPT处理,并且无法保证最终图像与您放入的图像相同。在这种情况下,它决定将PNG渐变图像缩小到较小的调色板,以缩小最终APK的大小。如果其他人有更好(或更正确)的解释,我很乐意听到。

-Dan

答案 1 :(得分:0)

试试这个:降低设备屏幕分辨率的宽度和高度(例如:对于moto droid:w:320px和h:480px,在photoshop中将分辨率保持在200 dpi或更高)

此致 Mistry Hardik

答案 2 :(得分:0)

似乎可能是因为它正在缩放图像以适应屏幕。当非矢量梯度缩放时,它们通常会得到“带状”外观。尝试制作与您所定位的屏幕大小相同的渐变,或尝试更改显示图像的ImageView(或其他),以确保它不会拉伸或缩放图像。

修改

在我看来,最好的解决方案是在运行时为你的背景创建渐变,看看GradientDrawable

答案 3 :(得分:0)

首先,手机屏幕的颜色深度远远低于PC的颜色深度。在您的PC上,R-G-B的深度为8-8-8位,但对于手机而言,它通常具有5-6-5深度。这意味着在PC上显示的任何精细渐变/阴影都会在设备上显示时失真,因为它的颜色深度在物理上是不够的。

因此,设计师的规则№1:避免设计中的细微色调和精细渐变

但是,如果您必须,那么您当然可以尝试以下方法,但您已收到警告!

1)对于运行时生成的渐变:使用抖动,如下所示:

setContentView(R.layout.screen_dashboard);
findViewById(R.id.layout).getBackground().setDither(true);

2)对于图形资源:在保存png之前始终应用5-6-5过滤器。这是一个带有示例的 good article 。应用5-6-5过滤器可确保png的颜色深度在设备功能范围内,并且也会降低png尺寸。

答案 4 :(得分:0)

如果使用图片获得渐变没有任何特殊原因,我强烈建议您查看Shape Drawable,因为它支持gradients应该(我没有尝试过,但我认为)允许无损缩放。