it-swarm.com.de

Android: Mit linearen Farbverlauf als Hintergrund sieht gebändert aus

Ich versuche, meinem ListView einen linearen Verlauf zuzuweisen. Dies ist der Inhalt meiner XML-Datei:

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

Also wende ich es auf meine ListView an mit:

Android:background="@drawable/shape_background_grey"

Es funktioniert, aber es sieht auf dem Emulator und auf einem echten Gerät sehr "gebändert" aus.

Gibt es eine Möglichkeit, dieses "Verhalten" zu reduzieren?

81

Wie Romain Guy vorschlägt:

listView.getBackground().setDither(true);

löst mein problem

Wenn dies speziell für AMOLED- und/oder HDPI-Geräte nicht ausreicht, versuchen Sie Folgendes:

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

Sie können das Dithering für Ihr Zeichenobjekt einfach aktivieren.

38
Romain Guy

Fügen Sie dies in Ihre Aktivität ein:

@Override
public void onAttachedToWindow() {
    super.onAttachedToWindow();
    Window window = getWindow();
    window.setFormat(PixelFormat.RGBA_8888);
}
8
Miša Peić

Bei mir funktioniert HTC Desire so

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

Wenn die Dither- und RGBA_888-Einstellung bei einigen Telefonen nicht hilft, können Sie das Element layerType auf software setzen, um die Hardwarebeschleunigung zu deaktivieren

Android:layerType="software"

Dies behebt mein Problem auf einem Samsung S5-Handy.

2
peter.bartos

Für mich verschwand das Banding, als ich Android: useLevel = "true" für den Farbverlauf setzte: 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>

Aber zuerst habe ich versucht, eine Layer-Liste mit einem "Rauschen" zu verwenden, um die Streifen zu entfernen. Es hilft, aber es gibt immer noch Streifen.

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

Der "noise_repeater", den ich erstellt und verwendet habe

enter image description here

2
TouchBoarder

Das einzige, was für mich funktionierte, war, einen leicht transparenten Alpha-Kanal sowohl für startColor als auch für endColor festzulegen.

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

Ich hatte die Idee, dies von diesem anderen zu versuchen SO Frage: Android: Dither = "wahr" nicht Dither, was ist los?

0
Greg