Android:使用线性渐变作为背景看起来是绑定的

我正在尝试将线性渐变应用于我的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" 

它的工作,但它看起来非常“绑定”在仿真器上,在一个真实的设备上。

有什么办法可以减less这种“行为”?

正如罗曼·盖伊所说:

 listView.getBackground().setDither(true); 

解决了我的问题

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

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

你可以简单地在你的Drawable对象上启用抖动。

把这个放在你的Activity中:

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

HTC Desire的作品就像这样

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

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

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

我创build和使用的“noise_repeater”drawable

在这里输入图像描述

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

 android:layerType="software" 

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

我唯一能做的就是在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> 

我有这个想法从这个其他的问题来试试这个: android:dither =“true”不会抖动,怎么了?