抖动渐变可绘制吗?

我使用以下drawable:

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <gradient android:startColor="@color/content_background_gradient_start" android:endColor="@color/content_background_gradient_end" android:angle="270" /> </shape> 

问题是我在hdpi设备(如Nexus One和Droid)上出现严重的条带,因为渐变从屏幕顶部到底部。

根据http://idunnolol.com/android/drawables.html#shape_gradient没有一个渐变的“抖动”属性。 我能做些什么来平滑渐变?

注意:将dither =“true”添加到形状似乎不起作用。

Solutions Collecting From Web of "抖动渐变可绘制吗?"

我写了你引用的文档。 我再看看代码,不幸的是,除了在代码中显式调用GradientDrawable.setDither()之外,没有办法在GradientDrawable上启用抖动。

(代码的样子, 技术上你可以包含Gradient作为<selector>唯一子对象,并在整个select器上启用抖动;但是,这绝对是一个黑客。

我不相信启用抖动实际上可以解决您的问题,因为抖动(至less在官方Android文档中提到)是用于解决设备调色板太小时出现的条带问题。 由于渐变的大小,这似乎是一个带状问题。

大家好,我有同样的问题,有一个解决scheme,但它不是很好。

 getWindow().setFormat(PixelFormat.RGBA_8888); getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER); 

它适用于我,但问题是,整个窗户抖动。 我正在寻找一种方法来抖动渐变,但我什么也找不到。 xml中的android:dither =“true”不起作用,而GradientDrawable.setDither(true)也不起作用。 所以,任何想法,我怎么只能渐变?

去年我遇到了一个非常类似的问题,在android-developers名单上没有得出任何有用的结论。

但是,前一阵子我发现 – 尝试了<gradient>和各种具有不同dither属性的Drawable ,手动创build了抖动的PNG – 如果我使用GIMP手动创build一个新的图像,并且指定了这个点的密度input120或240等)创build图像时,它看起来不错,即使在hdpi设备上。 尽pipe这是一个灰度渐变,没有太多的颜色。

保存的PNG比较大(至less240dpi),但看起来不错。