2010-05-07 63 views
20

我使用以下绘制:是否可以对可绘制的渐变进行抖动?

<?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> 

的问题是,我觉得非常的捆扎在华电国际设备(如Nexus One的和Droid),因为梯度从该屏幕的顶部到最底部进入。

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

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

回答

11

我写了你引用的文档。我再次看了一下代码,很遗憾,除了在代码中明确调用GradientDrawable.setDither()之外,没有办法在GradientDrawable上启用抖动。

(代码的样子,技术上你可以包括梯度作为孩子<selector>的,并启用抖动对整个选择;但是,它绝对是一个黑客)

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

2

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

然而,前一段时间我试图<gradient>和所有各种dither属性种类的Drawable秒和手动创建抖动的PNG —,如果我手动创建使用GIMP新形象,在这一点上指定的密度后发现—(即明确输入120或240等)创建图像时,它看起来很棒,即使在hdpi设备上。尽管这是一个灰度渐变,并没有太多的颜色。

保存的PNG结束时比较大(至少240dpi),但看起来不错。

7

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

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

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

+0

选定的答案没有帮助我,你的确做到了!拥有Android 2.2的Galaxy S。 – 2011-06-10 22:56:56