Estou tentando aplicar um gradiente linear ao meu ListView. Este é o conteúdo do meu xml drawable:
<?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>
Então, eu o aplico ao meu ListView com:
android:background="@drawable/shape_background_grey"
Funciona, mas parece muito "agrupado" no emulador e também em um dispositivo real.
Existe alguma maneira de reduzir esse "comportamento"?
@Francesco
Ótimo! Isso ajudou no meu Galaxy S com Android 2.2 . Converta seu comentário útil em uma resposta, para que as pessoas possam votar nele.Respostas:
Como sugere Romain Guy:
listView.getBackground().setDither(true);
resolve meu problema
Se isso não for suficiente, especialmente para dispositivos AMOLED e / ou hdpi, tente o seguinte:
@Override public void onAttachedToWindow() { super.onAttachedToWindow(); Window window = getWindow(); window.setFormat(PixelFormat.RGBA_8888); }
fonte
listView.getBackground().setDither(true);
não funcionará, tive que substituir oonAttachedToWindow
método.Você pode simplesmente ativar o pontilhamento em seu objeto Drawable.
fonte
setDither()
foi descontinuado no nível de API 23. Esta propriedade agora é ignorada.Coloque isso em sua atividade:
@Override public void onAttachedToWindow() { super.onAttachedToWindow(); Window window = getWindow(); window.setFormat(PixelFormat.RGBA_8888); }
fonte
Para mim, o HTC Desire funciona assim
window.getDecorView().getBackground().setDither(true);
fonte
setDither()
foi descontinuado no nível de API 23. Esta propriedade agora é ignorada.Para mim, as faixas desapareceram quando defini o android: useLevel = "true" no gradiente: 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>
Mas primeiro tentei usar um Layer-List com um drawable de "ruído" para remover as faixas, isso ajuda, mas ainda há algumas faixas.
<?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>
O drawable "noise_repeater" que criei e usei
fonte
Se o dither e a configuração RGBA_888 não ajudarem em alguns telefones, a solução pode ser definir o elemento
layerType
parasoftware
, para desativar a aceleração de hardwareandroid:layerType="software"
Isso resolveu meu problema em um telefone Samsung S5.
fonte
A única coisa que funcionou para mim foi definir um canal alfa ligeiramente transparente em startColor e 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>
Tive a ideia de tentar isso a partir de outra pergunta do SO: android: dither = “true” não dither, o que há de errado?
fonte