Android:使用线性渐变作为背景看起来带状

时间:2010-05-28 10:05:45

标签: android gradient shape

我正在尝试将线性渐变应用于ListView。 这是我的drawable xml的内容:

 <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient 
        android:startColor="#3A3C39" 
        android:endColor="#181818"
        android:angle="270"
     />
    <corners android:radius="0dp" />
</shape>

所以我将它应用于我的ListView:

android:background="@drawable/shape_background_grey"

它可以工作,但它在模拟器和真实设备上看起来非常“带状”。

有没有办法减少这种“行为”?

7 个答案:

答案 0 :(得分:80)

正如Romain Guy所说:

listView.getBackground().setDither(true);

解决了我的问题

如果这对于AMOLED和/或hdpi设备来说还不够,请试试这个:

@Override
public void onAttachedToWindow() {
    super.onAttachedToWindow();
    Window window = getWindow();
    window.setFormat(PixelFormat.RGBA_8888);
}

答案 1 :(得分:38)

您只需在Drawable对象上启用抖动即可。

答案 2 :(得分:8)

将其放入您的活动:

@Override
public void onAttachedToWindow() {
    super.onAttachedToWindow();
    Window window = getWindow();
    window.setFormat(PixelFormat.RGBA_8888);
}

答案 3 :(得分:3)

对我来说,HTC Desire就是这样的

window.getDecorView().getBackground().setDither(true);

答案 4 :(得分:2)

对于我来说,当我在渐变上设置android:useLevel =“true”时,条带消失了: gradient_dark.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient android:startColor="#464646"
        android:endColor="#323232"
        android:angle="270"
        android:type="linear"
        android:useLevel="true"
         />
</shape>

但首先我尝试使用带有“噪音”可绘制的图层列表来删除条带,但它仍然有一些条带。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@drawable/gradient_dark"/>
    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/noise_repeater"
            android:tileMode="repeat" />
    </item>

</layer-list>

我创建并使用了“noise_repeater”drawable

enter image description here

答案 5 :(得分:2)

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

android:layerType="software"

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

答案 6 :(得分:0)

对我来说唯一有用的是在startColor和endColor上设置一个稍微透明的alpha通道。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient 
        android:startColor="#FE3A3C39" 
        android:endColor="#FE181818"
        android:angle="270"
     />
</shape>

我有想法从其他SO问题中尝试这个:android:dither=“true” does not dither, what's wrong?