Можно ли сгладить градиент?
Я использую следующую возможность:
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<gradient
android:startColor="@color/content_background_gradient_start"
android:endColor="@color/content_background_gradient_end"
android:angle="270"
/>
</shape>
Проблема заключается в том, что я получаю строгую привязку к устройствам hdpi (например, Nexus One и Droid), так как градиент переходит от верхней части экрана к самому дну.
Согласно http://idunnolol.com/android/drawables.html#shape_gradient, для градиента нет атрибута "сглаживание". Можно ли что-то сделать, чтобы сгладить градиент?
Примечание: добавление dither = "true" в форму не работает.
Ответы
Ответ 1
Я написал документацию, на которую вы ссылались. Я еще раз посмотрел на код и, к сожалению, не удалось включить сглаживание в GradientDrawable, за исключением того, что явным образом вызывал GradientDrawable.setDither()
в коде.
(То, как выглядят коды, технически вы можете включить Gradient как единственный дочерний элемент <selector>
и включить сглаживание всего селектора, однако это определенно взломать.)
Я не уверен, что разрешающая сглаживание действительно решит вашу проблему, поскольку сглаживание (по крайней мере, как это отмечено в официальных документах Android) - для решения проблем с группировкой, когда устройство имеет слишком мало цветовой палитры. Это, по-видимому, проблема с диапазоном из-за размера градиента.
Ответ 2
Привет всем, у меня одна и та же проблема, есть одно решение, которое работает, но это не очень хорошо.
getWindow().setFormat(PixelFormat.RGBA_8888);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);
Это работает для меня, но проблема в том, что все окна затухают. Я искал способ сгладить только градиент, но я ничего не мог найти. android: dither = "true" в xml не работает, а GradientDrawable.setDither(true) также не работает. Итак, любые идеи, как я могу сглазить только градиент?
Ответ 3
В прошлом году я столкнулся с очень похожими проблемами и не нашел полезного вывода в списке разработчиков Android.
Однако некоторое время назад я обнаружил — после попытки <gradient>
и всех видов Drawable
с различными атрибутами dither
и вручную создающими смятые PNGs — что если я вручную создаю новое изображение, используя GIMP, а укажите плотность в этой точке (т.е. явно ввод 120, или 240 и т.д.) при создании изображения, он отлично смотрится даже на устройствах hdpi
. И это несмотря на то, что это градиент градации серого, с не так много цветов.
PNG при сохранении заканчивается сравнительно большим (по крайней мере, для 240 точек на дюйм), но выглядит отлично.