【问题标题】:smooth gradient on different devices在不同设备上平滑渐变
【发布时间】:2010-07-26 11:56:02
【问题描述】:

在我的应用程序中,我将渐变作为可绘制的,我将其用作背景,我不想让它看起来尽可能平滑。在谷歌搜索并自己尝试之后,我想出了以下内容。如果您仅调用 setDither(true),则在 nexus one 上,您的渐变仍然是带状的,因此您必须像这样设置 PixelFormat Window.setFormat(PixelFormat.RGBA_8888)。但另一方面,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?

【问题讨论】:

    标签: android user-interface gradient


    【解决方案1】:

    在 Photoshop(或 Gimp 或 Paint.NET 等)中打开您的图像并添加少量噪点。然后你不必在代码中做任何事情。

    【讨论】:

      【解决方案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>
      

      这样它将由操作系统绘制,并且应该非常平滑。

      【讨论】:

        【解决方案3】:

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

        显示器通常不是 24 位的,这通常应该做得足够好,至少在所有方面都相当一致。

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

        N1 总是会遇到问题,因为他们用于面板的矩阵具有两倍的绿色分辨率。

        【讨论】:

        • 是的,我正在使用相同的方法……它在大多数设备上看起来确实不错。谢谢
        【解决方案4】:

        如果抖动和 RGBA_888 设置在某些手机上不起作用,解决方法是将元素 layerType 设置为 software,以禁用硬件加速

        android:layerType="software"
        

        这解决了我在三星 S5 手机上的问题。

        【讨论】:

          猜你喜欢
          • 2013-11-17
          • 1970-01-01
          • 1970-01-01
          • 2012-10-20
          • 1970-01-01
          • 1970-01-01
          • 2020-11-13
          • 1970-01-01
          • 2011-08-23
          相关资源
          最近更新 更多