Я использую следующее drawable:
Проблема состоит в том, что я получаю серьезное соединение на hdpi устройствах (как Nexus One и Droid), так как градиент идет от вершины экрана к самой нижней части.
Согласно http://idunnolol.com/android/drawables.html#shape_gradient нет атрибута "размытия" для градиента. Есть ли что-нибудь, что я могу сделать для сглаживания градиента?
Примечание: добавление размытия = "верный" для формы, кажется, не работает.
Я написал документацию, на которую вы ссылались. Я еще раз просмотрел код, и, к сожалению, нет способа включить дизеринг на GradientDrawable, кроме явного вызова GradientDrawable.setDither()
в коде.
(Как выглядит код, технически вы можете включить Gradient в качестве единственного дочернего элемента
и включить дизеринг для всего селектора; однако это определенно хак. )
Я не уверен, что включение дизеринга действительно решит вашу проблему, поскольку дизеринг (по крайней мере, так указано в официальной документации Android) предназначен для решения проблем с полосатостью, когда устройство имеет слишком маленькую цветовую палитру. Похоже, что это проблема с полосами из-за размера градиента.
В прошлом году я столкнулся с очень похожей проблемой и не пришел к полезному выводу в списке разработчиков Android.
Однако некоторое время назад я обнаружил - после попытки
и всевозможных Drawable
s с различными dither
атрибутами и создания вручную смешанных PNG-изображений - что если я вручную создаю новое изображение, используя GIMP , и укажу плотность в этой точке (т.е. явно введя 120 или 240 и т. д.) при создании изображения, оно будет выглядеть великолепно, даже на устройствах hdpi
. И это несмотря на то, что это градиент в градациях серого, с небольшим количеством цветов.
PNG при сохранении оказывается сравнительно большим (по крайней мере, для 240 точек на дюйм), но выглядит великолепно.
Привет всем, у меня такая же проблема, есть одно решение, которое работает, но оно не очень хорошее.
getWindow().setFormat(PixelFormat.RGBA_8888);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);
Это работает для меня, но проблема в том, что все окно затухает. Я искал способ, как приглушить только градиент, но ничего не нашел. android:dither="true" в xml не работает и GradientDrawable.setDither(true) тоже не работает. Так что есть идеи, как я могу приглушить только градиент?