На эмуляторах под управлением Android 4.0 или 4.0.3 я вижу ужасные цветовые полосы, от которых я не могу избавиться. На любой другой версии Android, которую я тестировал, градиенты выглядят плавно.
У меня есть SurfaceView, который настроен как RGBX_8888, а полоса отсутствует на визуализированном холсте. Если я вручную сглаживаю изображение, накладывая шаблон шума в конце рендеринга, я могу снова сделать градиенты сглаженными, хотя, очевидно, за счет производительности, которую я бы предпочел избежать.
Так что полоса вводится позже. Я могу только предположить, что в 4.0+ мой SurfaceView квантуется до меньшей глубины в некоторой точке между его прорисовкой и отображением, и я могу видеть из скриншота, что градиенты шагают на 8 значений за раз в каждый канал, предлагая квантование до 555 (не 565).
Я добавил следующее в свою функцию Activity onCreate, но это не имело значения.
getWindow().setFormat(PixelFormat.RGBA_8888);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);
Я также попытался поместить вышеуказанное в onAttachedToWindow (), но изменений по-прежнему не было.
(Я считаю, что RGBA_8888 в любом случае является форматом окна по умолчанию для 2.2 и выше, поэтому неудивительно, что явная установка этого формата не влияет на 4.0+.)
Что оставляет вопрос: если источник 8888, а пункт назначения 8888, что вводит квантование / полосатость и почему он появляется только на 4.0 +?
Очень загадочно. Интересно, может кто-нибудь пролить свет?