Прежде всего, убедитесь, что ваше исходное изображение выглядит хорошо, чтобы вы не просто получили оттуда проблему.
Затем, в вашем методе onCreate (), выполните:
код1:
getWindow().getDecorView().getBackground().setDither(true);
getWindow().setFormat(PixelFormat.RGBA_8888);
устарел:
getWindow (). addFlags (WindowManager.LayoutParams.FLAG_DITHER);
И чтобы явно загрузить ваше изображение как 32-битное изображение (конфигурация RGBA-8888), добавьте следующее, где вы загружаете свои представления:
code2:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap gradient = BitmapFactory.decodeResource(getResources(), R.drawable.gradient, options);
findViewById(R.id.main).setBackgroundDrawable(new BitmapDrawable(gradient));
Сравнение между различными подходами: (это все скриншоты из полученного приложения)
Мои исходные изображения (64 цвета слева, 24 бита справа):
image1 и image2:
1: необработанное 64-цветное изображение (image1), заданное в качестве фона из макета XML:
2: то же изображение(изображение 1), используя code1 :
3: одно и то же изображение (изображение 1) с использованием обоих code1 и code2 :
4: изображение2, загруженное с code1 и code2 (в этом случае дизеринг не имеет большого значения, так как источник и назначение используют 8 бит на цвет):
Обратите внимание, что результирующие артефакты на изображении 3 уже существуют на исходном изображении.
Примечание: если кто-нибудь знает, как уменьшитьизображения немного вниз, не стесняйтесь редактировать этот пост ...