Действительно ли возможно размыть drawable градиент?

Я использую следующее drawable:




    


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

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

Примечание: добавление размытия = "верный" для формы, кажется, не работает.

20
задан Brandon O'Rourke 7 May 2010 в 22:38
поделиться

3 ответа

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

(Как выглядит код, технически вы можете включить Gradient в качестве единственного дочернего элемента и включить дизеринг для всего селектора; однако это определенно хак. )

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

11
ответ дан 30 November 2019 в 01:10
поделиться

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

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

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

2
ответ дан 30 November 2019 в 01:10
поделиться

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

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

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

7
ответ дан 30 November 2019 в 01:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: