Проблема совместимости градиента - по умолчанию ICS использует меньше цветов, чем все предыдущие версии Android - PullRequest
7 голосов
/ 26 декабря 2011

2.3.3 left, ICS on right (emulator). Notice the gradient fade effect difference inside the red box.

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

<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? Проблема возникает только на эмуляторе?

Ответы [ 4 ]

1 голос
/ 04 февраля 2012

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

1 голос
/ 26 декабря 2011

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

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

0 голосов
/ 15 марта 2012

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

0 голосов
/ 02 января 2012

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

...