题 不同设备上的平滑渐变


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

在我的应用运行的所有设备上平滑渐变的正确方法是什么。

PS:我发现了一些相关的话题

如何在Android中的画布上绘制平滑/抖动渐变

是否可以抖动渐变可绘制?


15
2017-07-26 11:56


起源




答案:


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


2
2017-11-26 14:00



感谢它为我工作........ :) - Rishabh Agrawal


您可以使用自定义形状(将其放在/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>

这样它将由操作系统绘制,它应该是非常光滑的。


2
2018-01-17 12:36





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

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

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

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


1
2017-12-01 13:13



是的,我使用相同的方法...它在大多数设备上看起来非常好。谢谢 - Mojo Risin


如果抖动和RGBA_888设置对某些手机没有帮助,解决方案可以是设置元素 layerType 至 software,禁用硬件加速

android:layerType="software"

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


0
2018-03-17 16:12