【问题标题】:Is it possible to dither a gradient drawable?是否可以抖动渐变绘制?
【发布时间】:2010-05-07 19:05:45
【问题描述】:

我正在使用以下可绘制对象:

<?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" 似乎不起作用。

【问题讨论】:

    标签: android graphics


    【解决方案1】:

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

    (代码的外观,技术上您可以将 Gradient 包含为 &lt;selector&gt;only 子项,并在整个选择器上启用抖动;但是,这绝对是一个黑客。)

    我不相信启用抖动会真正解决您的问题,因为抖动(至少正如官方 Android 文档中所指出的那样)是为了在设备的调色板太小时解决条带问题。由于梯度的大小,这似乎是一个条带问题。

    【讨论】:

      【解决方案2】:

      大家好,我也有同样的问题,有一种解决方案可行,但不是很好。

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

      它对我有用,但问题是整个窗口都是抖动的。我正在寻找一种仅抖动渐变的方法,但我找不到任何东西。 xml 中的 android:dither="true" 不起作用, GradientDrawable.setDither(true) 也不起作用。那么有什么想法我怎么能只抖动渐变?

      【讨论】:

      • 选择的答案对我没有帮助,你的对!拥有搭载 Android 2.2 的 Galaxy S。
      【解决方案3】:

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

      但是,不久前我发现——在尝试了&lt;gradient&gt; 和各种Drawables 和各种dither 属性并手动创建抖动的PNG 之后——如果我使用GIMP 手动创建一个新图像,并且此时指定密度(即明确输入 120 或 240 等)创建图像时,它看起来很棒,即使在hdpi 设备上也是如此。尽管它是灰度渐变,但颜色并不多。

      保存后的 PNG 最终会比较大(至少对于 240dpi),但看起来很棒。

      【讨论】:

        猜你喜欢
        • 2020-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多