2010-07-26 20 views
15

In meiner App habe ich Gradienten als Zeichen, die ich als Hintergrund verwenden und ich möchte es so glatt wie möglich aussehen. Nach dem googeln und selbst ausprobieren, habe ich folgendes gefunden. Auf nexus one, wenn Sie nur setDither (true) aufrufen, ist Ihr Farbverlauf immer noch banding, also müssen Sie PixelFormat wie dieses Window.setFormat (PixelFormat.RGBA_8888) setzen. Auf der anderen Seite unterstützt G1 RGBA_8888 nicht, daher macht das Aufrufen des Farbverlaufs den Farbverlauf noch hässlicher als zuvor, sodass Window.setFormat (PixelFormat.RGBA_8888) auf Geräten, die es nicht unterstützen, nicht gut funktioniert.glatte Steigung auf verschiedenen Geräten

Was ist der richtige Weg, um meinen Farbverlauf auf allen Geräten zu glätten, auf denen meine App ausgeführt wird.

PS: Ich fand einige relevante Themen

How to draw a smooth/dithered gradient on a canvas in Android

Is it possible to dither a gradient drawable?

Antwort

2

Ihr Bild in Photoshop öffnen (oder Gimp oder Paint.NET oder was auch immer) und eine geringe Menge an Rauschen hinzufügen. Dann müssen Sie nichts im Code tun.

+0

danke seine Arbeit für mich ......... :) – yokees

1

Wenn Sie Ihr Bild laden, setzen Sie das pixelFormat auf RGB_565 und setzen SieDither auf true, wenn Sie es ohne weitere Änderungen direkt auf den Bildschirm zeichnen.

Die Displays sind in der Regel nicht 24bit, das sollte in der Regel gut genug sein, zumindest ziemlich durchgängig.

Sie müssen 8888 nicht verwenden, wenn Sie das Alpha nicht benötigen und die Bilddaten nicht ändern. Es wird auf 99% der mobilen Displays als 16bit Farbe und nicht als 24bit angezeigt, da dies die Panels unterstützen.

N1 wird immer Probleme beim Schließen haben, weil die Matrix, die sie für das Panel verwenden, die doppelte grüne Auflösung hat.

+0

Ja ich benutze den gleichen Ansatz ... es sieht wirklich gut auf den meisten Geräten. Vielen Dank –

2

Sie können eine benutzerdefinierte Form verwenden (Put es in /drawable/gradient.xml oder so ähnlich):

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle"> 
<gradient 
    android:startColor="#000000" 
    android:endColor="#ffffff" 
    android:angle="90"/> 
</shape> 

diese Weise ist es durch das o lackiert werden, und es sollte vollkommen glatt sein.

0

Wenn die Zitter und RGBA_888 Einstellung auf einigen Telefonen nicht helfen, kann die Lösung das Element layerType-software gesetzt sein, die Hardwarebeschleunigung zu deaktivieren

android:layerType="software" 

Das ist mein Problem auf einem Samsung S5 Fest Telefon.

Verwandte Themen