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”不会抖动,怎么了?