Ответ 1
Откройте свое изображение в Photoshop (или Gimp или Paint.NET или что-то еще) и добавьте небольшое количество шума. Тогда вам не нужно ничего делать в коде.
В моем приложении у меня есть градиент как drawable, который я использую в качестве фона, и я не хочу, чтобы он выглядел как можно более гладким. После того, как я разобрался и попытался, я придумал следующее. Если вы вызываете только setDither (true), ваш градиент все еще используется, поэтому вам необходимо установить PixelFormat, как этот Window.setFormat(PixelFormat.RGBA_8888). Но с другой стороны G1 не поддерживает RGBA_8888, поэтому его вызов делает градиент еще более уродливым, чем раньше, поэтому Window.setFormat(PixelFormat.RGBA_8888) не будет работать на устройствах, которые его не поддерживают.
Каков правильный способ сгладить мой градиент на всех устройствах, на которых будет работать мое приложение.
PS: я нашел некоторые связанные темы
Как нарисовать гладкий градиент на холсте в Android
Откройте свое изображение в Photoshop (или Gimp или Paint.NET или что-то еще) и добавьте небольшое количество шума. Тогда вам не нужно ничего делать в коде.
Вы можете использовать пользовательскую форму (поместите ее в /drawable/gradient.xml или что-то в этом роде):
<?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>
Таким образом, он будет окрашен os, и он должен быть совершенно гладким.
При загрузке изображения установите для параметра pixelFormat значение RGB_565 и setDither значение true, если вы рисуете его прямо на экране без каких-либо изменений.
Дисплеи обычно не являются 24-битными, что обычно должно делать это достаточно хорошо, по крайней мере, довольно последовательно.
Вам не нужно использовать 8888, если вам не нужна альфа и не будет изменять данные изображения. Он отобразится на 99% мобильных дисплеев как 16-битный цвет, а не 24 бит, так как это поддержка панелей.
N1 всегда будет иметь проблемы, потому что матрица, которую они используют для панели, имеет двойное зеленое разрешение.
Если настройка сглаживания и RGBA_888 не помогает на некоторых телефонах, решение может состоять в том, чтобы установить элемент layerType
на software
, чтобы отключить аппаратное ускорение
android:layerType="software"
Это устранило мою проблему на телефоне Samsung S5.