Как сделать градиент на телефоне

Обновлено: 04.07.2024

Подробно ознакомившись с Bitmap, переходим к другому ключевому объекту графики – Drawable.

Drawable – это абстрактный контейнер для графического объекта. Его главное абстрактное умение – он может нарисовать свое содержимое на предоставленной ему канве. А вот что конкретно он нарисует, зависит уже от реализации. Это может быть, например, тот же Bitmap, если мы используем BitmapDrawable объект. Или это может быть простая геометрическая фигура, если мы используем ShapeDrawable.

Drawable-объекты мы можем создавать сами напрямую в коде. Но для некоторых из них мы можем создать описание в xml-файлах, в папке res/drawable. И когда он нам понадобится, мы укажем id файла, система сама распарсит его и создаст нам нужный объект.

Самое распространенное использование Drawable – это свойство background, которое есть у каждого View. В качестве значения вы можете указать там RGB-цвет или id ресурса из папки res/drawable. Далее система сама по этому значению определит тип и далее:

- если это цвет, то создаст ColorDrawable,
- если это id картинки в res/drawable, то создаст BitmapDrawable
- если это id xml-файла в res/drawable, то распарсит его и вернет соответствующего ему наследника Drawable: StateListDrawable, AnimationDrawable или какой-то другой.

В итоге View получит свой Drawable-объект и сможет его нарисовать.

В общем, как вы поняли, у абстрактного Drawable есть несколько наследников-реализаций и в ближайших уроках мы их рассмотрим. Начнем с тех, которые можно описать в xml. По ним есть отдельная статья в хелпе. Там, правда, есть пара ошибок копипаста, но в остальном все верно.

В этом уроке рассмотрим тег

Project name: P1621_DrawableShape
Build Target: Android 4.4
Application name: DrawableShape
Package name: ru.startandroid.develop.p1621drawableshape
Create Activity: MainActivity

res/layout/main.xml:

res/drawable/shape.xml:

Корневой тег shape и у него же есть одноименный атрибут shape, в котором мы указываем тип фигуры. Мы указали rectangle – это прямоугольник.

Далее, внутри тега shape, идет тег stroke, который позволяет задать нам характеристики линии контура (периметра) фигуры. Мы задаем толщину (width) в 1dp и черный цвет (color).

MainActivity.java:

В ImageView пока ничего не отображаем.


Видим ImageView с серым фоном

Перепишем метод setDrawable:

В качестве drawable будем передавать наш файл shape


ImageView теперь отображает прямоугольник с черным контуром.

Посмотрим, какие еще фигуры нам доступны.

Значение атрибута shape = oval, это эллипс

В нашем случае получился круг, т.к. ImageView квадратный.


Значение line даст нам горизонтальную линию


Есть еще фигура кольцо (ring), но о нем чуть позже.

Вернемся к тегу stroke. Добавим в него параметров.

Ширина – 4dp, цвет – синий. Параметры dashWidth и dashGap сделают линию контура пунктирной. dashWidth задает длину пунктирной черточки, а dashGap – расстояние между черточками


Добавим заливку, для этого используется тег solid

Тег solid имеет атрибут color, который позволяет указать цвет заливки фигуры. Мы указали в нем зеленый цвет.


По умолчанию фигура занимает все доступное ей пространство, но мы можем явно указать ее размер с помощью тега size.

Используем тег size с атрибутами width и height


Фигура теперь размером 100х100 и уже не занимает всю доступную ей площадь.

Учтите, что режим отображения зависит от scaleType y ImageView.

Тег padding позволяет нам задать величину отступа внутри фигуры. Это актуально, например, для TextView. Отступ будет учтен при размещении текста.

Мы указали различные отступы со всех 4 сторон.

Если мы теперь повесим эту фигуру в качестве background для TextView, результат будет таким


В качестве заливки мы можем использовать не один цвет, а градиент из двух или трех. Для этого используется тег gradient.

В теге gradient указываем два атрибута-цвета: startColor и endColor.

В результате получится градиент, переходящий из первого цвета во второй.


Градиент вовсе необязательно должен идти слева-направо. Мы можем указать угол направления. Для этого у тега gradient есть атрибут angle

В angle указываем угол 225. Угол 0 означает направление слева-направо, 90 – снизу вверх и т.д. Угол должен быть кратным 45.

В результате видим угол справа-сверху налево-вниз.


Тег gradient позволяет указать третий цвет, который вклинится между start- и end- цветами.

В атрибуте centerColor укажем синий цвет, и он в градиенте будет между красным и зеленым.


Градиент может быть разных типов. Мы рассмотрели тип linear, который используется по умолчанию. Есть еще два типа: radial и sweep.

Тип radial даст нам круговой градиент, а в параметре gradientRadius мы должны указать радиус круга.


Мы можем указать точку центра кругового градиента атрибутами centerX и centerY. Значения этих атрибутов должны быть от 0 до 1.

Центра градиента будет в точке (0.2, 0.2), если принять размеры фигуры за единицу.


Теперь посмотрим, как выглядит градиент sweep.


Для этого типа градиента также можно использовать атрибуты centerColor, centerX и centerY.

Для фигуры прямоугольника мы можем сгладить углы. За это отвечает тег corners.

Атрибут radius позволяет задать радиус закругления сразу для всех углов.


Есть возможность задать свой радиус для каждого угла отдельно.


Кольцо

Нам осталось рассмотреть четвертую фигуру - кольцо. Чтобы его получить, надо в атрибуте shape указать значение ring. Для кольца мы можем настроить два параметра: размер внутреннего радиуса и толщина кольца. Причем, эти два параметра мы можем указывать в абсолютном и относительном выражении.

innerRadius – позволяет указать внутренний радиус, а thickness – толщину кольца. Атрибут useLevel, который нам пока неизвестен, должен быть false, иначе эта фигура у меня не отображалась.


Отобразился круг с внутренним радиусом = 50dp и толщиной = 40dp.

Попробуем указать толщину кольца в относительном значении. Для этого вместо thickness используем thicknessRatio. В этом атрибуте мы указываем во сколько раз толщина кольца будет меньше его ширины.

Ширина кольца = 200 dp, это указано в теге size. thicknessRatio =10, значит толщина кольца = 200 dp / 10 = 20dp.


Теперь укажем внутренний радиус в относительном выражении. Для этого вместо innerRadius используем innerRadiusRatio. В атрибуте innerRadiusRatio указываем во сколько раз внутренний радиус меньше ширины кольца.

Ширина кольца = 200 dp. innerRadiusRatio = 3, значит внутренний радиус кольца = 200 dp / 3 = 67dp.


Как видите, кольцо может занимать не весь свой размер. Это зависит от значений, которые мы задаем для внутреннего радиуса и толщины.

У атрибутов относительного размера есть значения по умолчанию. Т.е. если мы явно не укажем значение для innerRadiusRatio, то по умолчанию он будет равен 3, а thicknessRatio по умолчанию равен 9. Посмотрим, как это выглядит

Мы указали только внутренний радиус. А размер толщины будет вычислен исходя из значения thicknessRatio по умолчанию, т.е. 9.


Теперь не будем указывать инфу о внутреннем радиусе.

Мы указали только толщину кольца, а внутренний радиус будет вычислен исходя из значения innerRadiusRatio по умолчанию = 3.


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


Видим, что кольцо заняло не все 200 dp по высоте, которые мы ему задали в теге size. Почему? Давайте считать исходя из значения по умолчанию.

Внутренний радиус = 200 / 3 = 67. Толщина = 200 / 9 = 22. Т.е. диаметр кольца получается = 22 + 67 * 2 + 22 = 178.

Попробуем подогнать размер кольца под все выделенное ему пространство.

Теперь радиус будет равен 200 / 2.5 = 80, а толщина = 200 / 10 = 20. Диаметр кольца = 20 + 80 * 2 + 20 = 200.

Это видно и на скрине. Кольцо теперь по размеру равно ImageView, т.е. = 200.


Атрибуты абсолютных значений (innerRadius и thickness) имеют приоритет перед относительными (innerRadiusRatio и thicknessRatio).

GradientDrawable

Хоть корневой тег и называется shape, но когда система его распарсит, она создает не ShapeDrawable, а GradientDrawable.

Также, этот объект мы можем сами создать программно.

Перепишем метод setDrawable:

Методы set* позволяют нам установить почти все те же параметры, что и в xml-файле.


Но есть и отличия. Например, я не нашел как для GradientDrawable установить значения размеров для кольца. С другой стороны, мы в GradientDrawable можем указать больше трех цветов для градиента.

Т.е. в основном - xml- и java-создание равноценны, но есть некоторые нюансы.

На следующем уроке:

- изучаем drawable теги: , ,

- в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование

- ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

- новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме

Так вышло, что в моем текущем проекте мне пришлось столкнуться с проблемой. Дизайнер согласовала с заказчиком набор иконок, раскрашенных простым линейным градиентом. И отправила мне эти иконки в svg формате, с чувством выполненного долга. Гугление выявило, что поддержка градиентов в vector drawable начинается только с SDK 24+.

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

В качестве рабочей картинки возьмем следующую:



Пытаемся импортировать оригинальную картинку в Android Studio.


Что и следовало ожидать.

Удаляем секцию defs и заменяем атрибут fill каким-нибудь цветом. Параметры градиент-стопов запоминаем, они нам позднее понадобятся. Теперь студия не возражает.

Наш полученный vector drawable:



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


Отступы в полпикселя мне понадобились, чтобы избавиться от артефактов, которые были видны, когда я поместил картинку в layout.

Результат вполне достойный (только я случайно поменял местами startColor и endColor, а переделывать уже не хочется):

 title=

Gradient – один из самых мощных инструментов по обработке фотографий. С этой программой ты можешь накладывать фильтры и изменять текстуры, применять различные коллажи, пользоваться бьюти-функциями и даже сделать тест на ДНК!

В основе работы лежат продвинутые алгоритмы искусственного интеллекта, которые вместе с обилием настроек могут изменить вашу фотографию или селфи до неузнаваемости буквально за несколько секунд.

Особую популярность Gradient приобрел благодаря возможностям сделать своего рода тест ДНК (национальности) и сравнить себя со знаменитостями — настоящий эксклюзив среди Android приложений. Суть теста заключается в том, что программа может предсказать вашу национальность. Просто сделайте фотографию или выберите любой селфи снимок из галереи.

Благодаря возможностям искусственного интеллекта утилита сканирует найденное лицо и выводит результат в виде списка из 4 стран с процентным соотношением. Проценты и говорят вам о том, насколько вы похожи на ту или иную национальность. Кроме того, ты можешь сравнить себя со знаменитостями и узнать на кого похож больше всего. Алгоритмы приложения отсканируют твое лицо и выведут приближенный результат!

Надоели примитивные фоторедакторы? С данной программой можно не только сдать тест на национальность, но и перенестись в эпоху средних веков и посмотреть на то, как выглядел бы твой портрет. Алгоритмы Gradient в считанные секунды нарисуют портрет тех времен, который будет максимально похож на тебя. Поделись им со своими друзьями!

Особенности Редактор Фото Gradient для Android:

  • найди максимально похожую на себя чертами лица личность из шоу-бизнеса;
  • сделай бесплатный тест на ДНК и определи свою принадлежность (внешняя схожесть с жителями других стран) к различным национальностям;
  • пользуйся большим количеством фильтров и опций для настройки фотографий и превращай их в шедевры — все в твоих руках;
  • каждую неделю добавляются новые функции, инструменты и текстуры.

По любым вопросам пишите разработчику в Телеграм:

Пожалуйста, подождите: фоторедактор загружается.

Переместите изображения сюда
или выберите файлы

Количество файлов не ограничено
Размер изображений не ограничен

Превью (>):

Добавьте необходимые фильтры для начала работы.
Список фильтров представлен внизу экрана.


Приложение Gradient постоянно создает все новые и новые AI-функции, позволяющие создавать очень крутые фотографии. Готовые снимки можно постить в ленте Инстаграм, делиться с друзьями. Фильтры Градиент пробуют не только обычные пользователи, но и звезды. В числе первых пробует все новинки Gradient Ольга Бузова. В нашей сегодняшней подборке мы расскажем сразу о 6 новых масках Gradient, которые вы можете успешно применять в своем аккаунте.


Ольга Бузова испытывает маску Статуи от Gradient

Недавно мы также рассказывали о фильтре Градиент «Превращение в орка«.

В нашей подборке новинок Градиента вас ждут:

  • маска Моя статуя;
  • на кого ты похож;
  • я барби;
  • стиль демона;
  • портрет карандашом;
  • мульт-стиль.

Обязательно используйте фотографии, в которых четко видно ваше лицо крупным планом. Лица мелким планом, в профиль приложение обработать не в состоянии.

Маски Gradient, которые помогают полностью изменить ваши фотографии

  1. Маска Моя статуя предполагает то, что вы загружаете свое фото, и оно трансформируется в статую. Ваше лицо приобретает все черты статуи.
  2. На кого ты похож — фильтр, который помогает выявить на какую знаменитость вы похожи. Поэкспериментируйте с разными фотографиями, результаты иногда потрясающие.
  3. Я барби— этот фильтр помогает представить, как бы выглядела кукла барби, если бы ее делали, основываясь на вашем образе. Цвет волос готовых куколок не всегда совпадает с оригинальным фото, но так даже интереснее. Из обычных фото получаются замечательные кукольные личики.
  4. Стиль демона — устрашающий фильтр, помогающий быстро перевоплотиться в настоящего демона. Кожа покрывается интересным цветом с переливами, глаза приобретают желтый оттенок.
  5. Портрет карандашом не всегда просто сделать. Но благодаря этой маске, обарабатывающей любое фото за несколько секунд, вы можете быстро получать карандашные рисунки. Кстати, такой фильтр может быть полезен художникам, которые рисуют портеры карандашом по фотографии.
  6. Мульт-стиль — очень популярный эффект во многих соцсетях. Такие эффекты пользуются популярностью и в Тик Токе, и в Инстаграме. Мы уже знакомили вас с мультяшными масками принцессы. Выполнены они действительно очень качественно. Попробуйте эту возможность и в приложении Gradient.

Как пользоваться масками Градиент

Такие обработанные фото от приложения Gradient всегда пользуются большой популярностью. Многие подписчики хотят попробовать тоже, шлют вопросы и реакции, а это повышает интерес к вашей страничке и активность в ваших сториз.

Читайте также: