2011-12-26 2 views
7

2.3.3 left, ICS on right (emulator). Notice the gradient fade effect difference inside the red box.Gradient проблема совместимости - ICS по умолчанию меньшим количеством цветов, чем все предыдущие версии Android

Gingerbread (2.3.3) эмулятором слева, ICS (4.0.3) эмулятор правой. Обратите внимание на разницу эффектов затухания градиента внутри красного прямоугольника (открыть в отдельном окне, чтобы увидеть полноразмерное изображение).

MainView фон:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="@drawable/app_bg" 
android:orientation="vertical" > 

... 

</LinearLayout> 

app_bg.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle"> 
<gradient android:startColor="#000" android:centerColor="#333" 
    android:endColor="#000" android:angle="270" /> 
</shape> 

Что является причиной этой проблемы? Как исправить это, чтобы градиент ICS выглядел бы так же гладко, как версия 2.3.3? Возникает ли проблема только на эмуляторе?

+0

Отображается ли ваш дисплей хоста (то есть экран, на котором отображается эмулятор), определенно 32bpp? –

+0

Что это значит? Оба эмулятора работают на одном мониторе в то время, когда был сделан снимок экрана. –

+0

Моя ошибка, я не заметил, что экран 2.3 тоже был эмулирован. –

ответ

0

Только что подтверждено на устройстве ICS 4.0.3: это эмулятор ТОЛЬКО проблема.

+1

нет, это не так. У меня такая же проблема на заметке галактики ... – syloc

1

Я думаю, проблема в том, что андроид (справа) рисует градиент, используя меньшее количество цветов. Я считаю, что вы хотите включить сглаживание, чтобы помочь замаскировать падение глубины цвета. Возможно, посмотрите на этот ответ link

Я не совсем уверен, как это работает, но я считаю, что Android по умолчанию будет работать по умолчанию в режиме RGB_565, даже если устройство способно использовать 24-битные цвета.

+0

Да, кажется, что некоторые из них не подходят для меньшего количества цветов, чем нужно для правильного рисования градиента. Но почему это происходит на ICS и как ее изменить - я понятия не имею, и я тоже не нашел решения. Надеемся, что кто-то, кто знает ответ, разместит его здесь ... Установка 'window.setFormat (PixelFormat.RGBA_8888); 'in' onAttachedToWindow() 'в действии, где выполняется фоновое изображение, не устраняет проблему. –

0

Я видел ваш комментарий, что использование PixelFormat.RGBA_8888 не помогло.
Вы также можете попробовать добавить флаг сглаживания: window.addFlags(WindowManager.LayoutParams.FLAG_DITHER);.
Вы можете увидеть мой предыдущий связанный ответ о смятении и цвета здесь:
Awful background image quality in Android

+1

Я добавил 'getWindow() setFormat (PixelFormat.RGBA_8888);' и 'getWindow(). AddFlags (WindowManager.LayoutParams.FLAG_DITHER);' к моему методу 'onCreate' и он по-прежнему не исправляет проблему (doesn ' если это до или после 'super.onCreate (savedInstanceState);'). –

+1

Очень странно, единственное, что я могу думать, вызывает в этом случае вашу проблему, если двигатель оптимизирует слишком много, если вы установите цвет градиента как # FF000000, а не просто # 000, может работать, но это звучит как сбой в ICS. – Jave

+0

Пробовал 6 цветовых кодов символов и 8 цветовых кодов символов (альфа, как FF), но все же градиент выглядит как из 90-х. –

1

ICS автоматически добавляет эффект градиента, если аппаратное ускорение включено в приложении. Также возможно принудительное ускорение аппаратного ускорения для всех приложений, вы заметите, что некоторые приложения будут иметь градиентный фон, а не черный.