Android: использование линейного градиента в качестве фонового изображения
Я пытаюсь применить линейный градиент к элементу ListView.
Это содержимое моего гибкого 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"
Он работает, но он выглядит очень "сгруппированным" на эмуляторе и на реальном устройстве.
Есть ли способ уменьшить это "поведение"?
Ответы
Ответ 1
Как говорит Ромен Гай:
listView.getBackground().setDither(true);
решает мою проблему
Если этого недостаточно для устройств AMOLED и/или hdpi, попробуйте следующее:
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
Window window = getWindow();
window.setFormat(PixelFormat.RGBA_8888);
}
Ответ 2
Вы можете просто включить сглаживание на вашем объекте Drawable.
Ответ 3
Поместите это в свою деятельность:
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
Window window = getWindow();
window.setFormat(PixelFormat.RGBA_8888);
}
Ответ 4
Для меня на HTC Desire работает вот так
window.getDecorView().getBackground().setDither(true);
Ответ 5
Для меня полоса исчезла, когда я установил андроид: 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>
Но сначала я попытался использовать Layer-List с "шумом", который можно извлечь, чтобы удалить полосу, это помогает, но есть еще какая-то полоса.
<?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", созданный и используемый
![enter image description here]()
Ответ 6
Если настройка сглаживания и RGBA_888 не помогает на некоторых телефонах, решение может состоять в том, чтобы установить элемент layerType
на software
, чтобы отключить аппаратное ускорение
android:layerType="software"
Это устранило мою проблему на телефоне Samsung S5.
Ответ 7
Единственное, что сработало для меня, это установить слегка прозрачный альфа-канал как для startColor, так и для endColor.
<?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" не сглаживает, что не так?