Можно ли сглаживать градиент для рисования? - PullRequest
20 голосов
/ 07 мая 2010

Я использую следующую переменную:

<?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>

Проблема в том, что я получаю жесткие полосы на устройствах с интерфейсом HDMI (например, Nexus One и Droid), поскольку градиент переходит от верхней части экрана ксамое нижнее.

Согласно http://idunnolol.com/android/drawables.html#shape_gradient для градиента не существует атрибута "сглаживание".Могу ли я что-нибудь сделать, чтобы сгладить градиент?

Примечание: добавление dither = "true" к фигуре, похоже, не работает.

Ответы [ 3 ]

11 голосов
/ 08 мая 2010

Я написал документацию, на которую вы ссылались. Я еще раз взглянул на код, и, к сожалению, нет способа включить дизеринг на GradientDrawable, кроме как путем явного вызова GradientDrawable.setDither() в коде.

(То, как выглядят коды, технически , вы можете включить градиент как only дочерний элемент <selector> и включить дизеринг всего селектора; однако, это определенно хак.)

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

7 голосов
/ 23 июля 2010

Привет всем, у меня та же проблема, есть одно решение, которое работает, но это не очень хорошо.

getWindow().setFormat(PixelFormat.RGBA_8888);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);

Это работает для меня, но проблема в том, что все окна помяты. Я искал способ сглаживать только градиент, но ничего не мог найти. android: dither = "true" в xml не работает и GradientDrawable.setDither (true) также не работает. Так какие-нибудь идеи, как я могу размягчить только градиент?

2 голосов
/ 08 мая 2010

Я столкнулся с очень похожей проблемой в прошлом году и не пришел к полезному выводу в списке разработчиков Android.

Однако некоторое время назад я обнаружил - после попытки <gradient> и всевозможных Drawables с различными атрибутами dither и созданием вручную PNG-файлов со сглаживанием - что, если я вручную создаю новое изображение, используя GIMP и , укажите плотность в этой точке (то есть, явно введя 120 или240 и т. Д.) При создании изображения оно отлично смотрится даже на hdpi устройствах.И это несмотря на то, что это градиент шкалы яркости с не очень большим количеством цветов.

PNG при сохранении оказывается сравнительно большим (по крайней мере, для 240 точек на дюйм), но выглядит великолепно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...