2010-07-26 28 views
15

在我的应用程序中,我使用渐变作为背景,我不想让它看起来尽可能平滑。经过Google自己搜索和尝试后,我想出了以下内容。在nexus上,如果只调用setDither(true),你的渐变仍然是条纹,所以你必须像这个Window.setFormat(PixelFormat.RGBA_8888)一样设置PixelFormat。但另一方面,G1不支持RGBA_8888,所以调用它会使渐变比以前更丑,所以Window.setFormat(PixelFormat.RGBA_8888)在不支持它的设备上效果不佳。在不同设备上的平滑渐变

什么是正确的方式平滑我的应用程序将运行的所有设备上的渐变。

PS:我发现了一些相关主题

How to draw a smooth/dithered gradient on a canvas in Android

Is it possible to dither a gradient drawable?

回答

2

在Photoshop中打开(或Gimp或Paint.NET或其他)你的形象和增加噪声少量。那么你不必在代码中做任何事情。

+0

感谢它为我工作........ :) – yokees 2012-10-03 08:34:42

1

加载图像时,如果将其直接绘制到屏幕上而不进行其他修改,请将pixelFormat设置为RGB_565并将setDither设置为true。

显示器通常不是24位,通常应该足够好,至少相当一致。

如果您不需要alpha并且不会修改图像数据,则不需要使用8888。它将在99%的移动显示器上显示为16位颜色,而不是24位,因为这是面板支持的。

N1将始终存在问题,因为它们用于面板的矩阵具有绿色分辨率的两倍。

+0

是的,我使用相同的方法......它在大多数设备上看起来非常好。谢谢 – 2010-12-02 21:53:42

2

您可以使用自定义形状(把它放在/drawable/gradient.xml或类似的东西):

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle"> 
<gradient 
    android:startColor="#000000" 
    android:endColor="#ffffff" 
    android:angle="90"/> 
</shape> 

这样,它会被操作系统画,它应该是非常光滑。

0

如果抖动和RGBA_888设置不会在某些手机上的帮助,该解决方案可以为元素设置layerTypesoftware,禁用硬件加速

android:layerType="software" 

这固定在三星S5我的问题电话。