2010-07-26 19 views
15

W mojej aplikacji mam gradient w formie rysunków, które używam jako tło, i chcę, aby wyglądał tak gładko, jak to tylko możliwe. Po przeszukaniu i próbie samemu wymyśliłem następujące. Na nexusie jeden, jeśli wywołasz tylko setDither (true), twój gradient nadal się pasykuje, więc musisz ustawić PixelFormat tak jak Window.setFormat (PixelFormat.RGBA_8888). Ale z drugiej strony G1 nie obsługuje RGBA_8888, więc wywołanie go sprawia, że ​​gradient jest jeszcze brzydszy niż wcześniej, więc Window.setFormat (PixelFormat.RGBA_8888) nie będzie działać dobrze na urządzeniach, które go nie obsługują.płynny gradient na różnych urządzeniach

Jaki jest prawidłowy sposób wygładzania gradientu na wszystkich urządzeniach, na których będzie działać moja aplikacja.

PS: Znalazłem kilka tematów pokrewnych

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

Is it possible to dither a gradient drawable?

Odpowiedz

2

Otwórz obraz w programie Photoshop (lub Gimp lub Paint.NET lub cokolwiek) i dodać niewielką ilość szumów. Wtedy nie musisz nic robić w kodzie.

+0

dziękuję za pracę ........ :) – yokees

1

Podczas ładowania obrazu, ustaw pixelFormat na RGB_565 i setDither na wartość true, jeśli rysujesz bezpośrednio na ekranie bez żadnych innych modyfikacji.

Wyświetlacze zwykle nie są 24-bitowe, co zwykle powinno być wystarczająco dobre, a przynajmniej całkiem równomierne.

Nie musisz używać 8888, jeśli nie potrzebujesz alfa i nie będziesz modyfikować danych obrazu. Będzie wyświetlany na 99% wyświetlaczy mobilnych jako 16-bitowy, a nie 24-bitowy, ponieważ to właśnie obsługuje panel.

N1 zawsze będzie mieć problemy z bliska, ponieważ macierz, której używają dla panelu, ma podwójną zieloną rozdzielczość.

+0

Tak, używam tego samego podejścia ... na większości urządzeń wygląda całkiem nieźle. Dzięki –

2

Można użyć niestandardowego kształtu (umieścić go w /drawable/gradient.xml czy coś takiego):

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

ten sposób zostanie on namalowany przez system operacyjny i powinien być idealnie gładka.

0

Jeśli ditheringu i ustawienie RGBA_888 nie pomagają w niektórych telefonach, rozwiązaniem może być ustawienie elementu layerType do software, aby wyłączyć akcelerację sprzętową

android:layerType="software" 

to ustalone mój problem na Samsung S5 telefon.

Powiązane problemy