我正在尝试将线性渐变应用于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"
它可以工作,但它在模拟器和真实设备上看起来非常“带状”。
有没有办法减少这种“行为”?
答案 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
答案 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?