2010-05-07 19 views
20

ich folgende ziehbar bin mit:Ist es möglich, einen Gradienten zu zeichnen?

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" 
    > 

    <gradient 
     android:startColor="@color/content_background_gradient_start" 
     android:endColor="@color/content_background_gradient_end" 
     android:angle="270" 
     /> 

</shape> 

Das Problem ist, dass ich schwere Banding auf hdpi Geräte (wie das Nexus One und Droid), da die Steigung geht vom oberen Rand des Bildschirms auf den Grund erhalten .

Nach http://idunnolol.com/android/drawables.html#shape_gradient gibt es nicht ein „Dither“ -Attribut für einen Gradienten. Kann ich etwas tun, um den Farbverlauf zu glätten?

Hinweis: Hinzufügen von Dither = „true“ zu Form scheint nicht zu funktionieren.

Antwort

11

Ich schrieb die Dokumentation, die Sie verwiesen. Ich habe einen anderen Blick auf den Code geworfen und leider gibt es keine Möglichkeit, Dithering auf einem GradientDrawable zu aktivieren, außer durch expliziten Aufruf von GradientDrawable.setDither() im Code.

(Die Art und Weise die Codes sieht, technisch Sie die Steigung als nur Kind eines <selector> und ermöglichen auf der gesamten Wähler Dithering umfassen könnte;. Aber es ist auf jeden Fall ein Hack)

I Ich bin nicht davon überzeugt, Dithering zu aktivieren, wird Ihr Problem tatsächlich lösen, da Dithering (zumindest wie es in den offiziellen Android-Dokumenten erwähnt wird) zur Lösung von Banding-Problemen dienen, wenn das Gerät eine zu kleine Farbpalette hat. Dies scheint aufgrund der Größe des Gradienten ein Bandenproblem zu sein.

2

stand ich ein sehr ähnliches Problem im vergangenen Jahr und kam zu keinem sinnvollen Abschluss auf der Android-Entwickler-Liste.

jedoch vor einer Weile entdeckte ich — nach <gradient> und alle Arten von Drawable s mit verschiedenen dither Attribute versuchen und manuell Dithering PNGs Schaffung —, wenn ich manuell ein neues Bild mit GIMP erstellen und an dieser Stelle die Dichte angeben (dh explizit Eingabe von 120 oder 240 usw.) beim Erstellen des Bildes, es sieht gut aus, auch auf hdpi Geräte. Und das, obwohl es ein Graustufen-Farbverlauf ist, mit nicht so vielen Farben.

Das PNG beim Speichern endet als vergleichsweise groß (zumindest für 240dpi), aber es sieht gut aus.

7

Hallo zusammen ich das gleiche Problem haben, gibt es eine Lösung, die funktioniert, aber es ist nicht sehr gut.

getWindow().setFormat(PixelFormat.RGBA_8888); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER); 

Es funktioniert für mich, aber das Problem ist, dass das ganze Fenster gedithert wird. Ich wollte einen Weg finden, nur den Gradienten zu zittern, aber ich konnte nichts finden. android: dither = "true" in xml funktioniert nicht und GradientDrawable.setDither (true) funktioniert auch nicht. Also irgendwelche Ideen wie kann ich nur den Gradienten zittern?

+0

Die ausgewählte Antwort hat mir nicht geholfen, deins! Habe ein Galaxy S mit Android 2.2. –

Verwandte Themen