Градиент textview android studio

Drawable. Фигуры и градиенты

Shape и ShapeDrawable

Фигуры являются подмножеством Drawable-ресурсов.

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

Можно создавать ресурсы фигур на основе стандартных фигур вроде прямоугольника, эллипса, линии. Для использования ресурсов фигур нужно создать в подкаталоге res/drawable XML-файл, в котором будет присутствовать тег , который в свою очередь может содержать дочерние элементы , ,

Имя файла без расширения будет служить идентификатором (ID): R.drawable.filename в Java-коде и @[package:]drawable/filename в XML-файлах.

Элементы фигуры

— отступы. Возможные атрибуты: android:left, android:top, android:right, android:bottom

  • — размеры фигуры. Возможные атрибуты: android:height, android:width
  • — сплошной цвет для фигуры. Возможные атрибуты: android:color
  • — контур фигуры. Возможные атрибуты: android:width, android:color, android:dashGap (расстояние между черточками), android:dashWidth (длина пунктирной черточки)
  • rectangle (Прямоугольник)

    shape_rect.xml — Атрибут android:shape здесь необязателен: rectangle — это значение по умолчанию.

    Пример с градиентным прямоугольником в качестве разделителя

    Создадим файл separator.xml:

    В разметке приложения добавим код:

    У первого разделителя ширина 1dp, у второго — 3dp. Получили красивую полоску.

    У прямоугольников можно скруглить углы при помощи тега corners

    Можно закруглить углы по отдельности:

    oval (Эллипс)

    Другой вариант с пунктиром:

    ring (Кольцо)

    shape_ring.xml — Для кольца имеются дополнительные атрибуты:

    innerRadius Внутренний радиус innerRadiusRatio Отношение между внешним и внутренним радиусами. По умолчанию равно 3 thickness Толщина кольца (т.е. разница между внешним и внутренним радиусами) thicknessRatio Отношение ширины кольца к его толщине. По умолчанию равно 9

    line (Горизонтальная линия)

    shape_line.xml — Линия может быть только горизонтальной

    Градиенты: gradient и GradientDrawable

    Тег gradient (класс GradientDrawable) позволяет создавать сложные градиентные заливки. Каждый градиент описывает плавный переход между двумя или тремя цветами с помощью линейного/радиального алгоритма или же используя метод развертки.

    Тег gradient внутри тега shape. Основные атрибуты: type, startColor (обязателен), endColor (обязателен) и middleColor (необязателен). Также иногда оказывается полезным атрибут centerColor.

    Используя атрибут type, вы можете описать свой градиент:

    linear

    • android:type=»linear» можно опустить, он так и есть по умолчанию. Отображает прямой переход от цвета startColor к цвету endColor под углом, заданным в атрибуте angle.
    • Атрибут android:angle используется только линейным градиентом и должен быть кратным значению 45.

    Дополнительный материал: Android Dev Tip #3 — помните о прозрачности, который может привести к другому результату.

    Также можно задействовать атрибуты centerX и centerY.

    radial

    Интересный эффект получается при использовании множества радиальных градиентов.

    sweep

    Рисует развёрточный градиент с помощью перехода между цветами startColor и endColor вдоль внешнего края фигуры (как правило, кольца).

    Можно использовать атрибуты android:centerX и android:centerY.

    Попробуйте также такой вариант.

    А почему бы не повращать?

    Примеры с shape

    Закругляем уголки у компонентов

    Создадим отдельный файл res/drawable/roundrect.xml и с его помощью скруглим уголки у LinearLayout, ImageView, TextView, EditText:

    В разметке активности пишем следующее:

    Овальный кабинет

    В Белом доме есть Овальный кабинет. Если вам придётся писать приложение для администрации президента США, то все элементы нужно сделать овальными. Создадим файл res/drawable/oval.xml:

    Заменим в предыдущем примере android:background=»@drawable/roundrect» на android:background=»@drawable/oval».

    Источник

    Gradient Text

    Recently there was a comment on the article on Text Shadows asking how to fill text with a gradient. In this article we’ll look at a simple technique for doing precisely that.

    Creating text filled with a gradient is actually really easy, although it’s not immediately obvious how to do it in the same was as simply changing the text colour. The trick is to use a Shader, or more specifically a LinearGradient (which extends Shader), to do all of the work for us.

    The constructor for LinearGradient that we’ll use takes seven arguments, although there is also a more complex form which allows for multiple colour steps to be defined. The first four of these represent the start x & y and end x & y coordinates of the line along which the gradient will be drawn (this effectively controls the direction of the gradient). The next two arguments represent the start and end colours of the gradient, and the final argument dictates how areas outside of the rectangle defined in the first four arguments will be drawn.

    So how do we go about applying this? In its simplest form, we can get a reference to a standard TextView object, and set the Shader on it’s Paint object:

    The TileMode that we’re using means that the colour of areas outside of the rectangle (0, 0) – (0, 100) will match the colour of the closest edge of that rectangle – i.e. extending the colour of the edges of the rectangle.

    Читайте также:  Перехват android трафика wireshark

    While this will certainly work, it does suffer from the small drawback that the gradient will need to be static dimensions which are completely detached from the size of the text within the TextView. So what if we want the dimensions of the gradient to actually match our text? We simply need to extend TextView.

    Now the obvious thought is to extend TextView and simply override onDraw() to create a new LinearGradient which matches the dimensions of the textView control each time the control is drawn. However this is rather inefficient because it means instantiating a Shader object each time onDraw is called. Object instantiation is a rather expensive business and should be avoided at all costs in your onDraw method. If you perform object instantiation in your onDraw you’ll find that your frame rates suffer badly as a result.

    So if we don’t do it in onDraw, then where should we do it? The answer is quite obvious when we think about how often we actually need to create a new LinearGradient: only when the size of the TextView changes. Therefore, the most efficient place to do this is actually in onLayout:

    Источник

    Gradient Drawable in Android — Create Gradient Backgrounds

    LAST UPDATED: AUGUST 10, 2021

    We have seen the Gradient colors on many websites as backgrounds, used in App logos, like in the Instagram logo shown below, App background, buttons, progress bars, etc. A gradient makes the UI of any app, be it Mobile App or a website, more beautiful and vibrant. Many developers are using gradient in their apps and websites to make it look more attractive. So in this tutorial, we will learn how to set a gradient background for our Android App activity.

    What is Gradient?

    According to Wikipedia:

    In computer graphics, a color gradient specifies a range of position-dependent colors, usually used to fill a region. For example, many window managers allow the screen background to be specified as a gradient. The colors produced by a gradient vary continuously with the position, producing smooth color transitions.

    A color gradient is also known as a color ramp or a color progression. In assigning colors to a set of values, a gradient is a continuous colormap, a type of color scheme.

    So let’s add a simple gradient to our Android App.

    Step 1: Create a new Project

    Open Your Android Studio Click on «Start a new Android Studio project» (Learn how to setup Android Studio and create your first Android project)

    Choose «Empty Activity» from the project template window and click Next

    Enter the App Name, Package name, save location, language(Java/Kotlin, we use Java for this tutorial), and minimum SDK(we are using API 19: Android 4.4 (KitKat))

    Next click on the Finish button after filling the above details

    Now, wait for the project to finish the build.

    Step 2: Creating Gradient Color

    To create a gradient color we need to create a .xml file in the drawable folder. So go to app -> res -> drawable and right-click on drawable -> New -> Drawable Resource File and create gradient_drawable.xml file.

    The code of gradient_drawable.xml file is shown below:

    As you can see in the code above, we are using the gradient tag along with providing android:startColor , android:centerColor and android:endColor attributes to define the color that will be used in the gradient. So let’s learn about the attributes available in the gradient drawable.

    XML attributes of Gradient Drawable

    Following are the attributes of the drawable:

    Start color of the gradient.

    The value of color may be in any one of «#rgb», «#argb», «#rrggbb», «#aarrggbb» forms

    End color of the gradient

    The value of color may be in any one of «#rgb», «#argb», «#rrggbb», «#aarrggbb» forms

    The Center color of the gradient. It may be optional but you can use it if you want

    The value of color may be in any one of «#rgb», «#argb», «#rrggbb», «#aarrggbb» forms

    X position of the center point of the gradient within the shape as a fraction of the width

    0.5 is the default value

    Y-position of the center point of the gradient within the shape as a fraction of the height

    0.5 is the default value

    The angle of the gradient and it is only used with the linear gradient

    It must be multiple of 45 in the range [0, 315]

    It is used to set the type of gradient and the default value is linear . and it is of 3 types

    It is used to set the radius of the gradient. It is only used with the radial gradient.

    Step 3: Modify activity_main.xml

    Now open the activity_main.xml file and remove the default code and change the layout to RelativeLayout and set it’s background to gradient background as shown below:

    with this our activity_main.xml is done and the complete code will look like:

    And the output of the above is shown below:

    We can also add the gradient to different Views and layouts in our Android App. Let’s cover a few other Android App components in which we can use gradient backgrounds.

    Gradient background with Button:

    Here we will use the gradient background for button:

    Output of the above code is:

    Gradient background with TextView:

    Here we will use the gradient background for TextView:

    The output of the above code is:

    Gradient background with ImageView:

    Here we will use the gradient background for ImageView:

    The output of the above code is:

    Gradient background with SeekBar:

    Here we will use the gradient background for SeekBar:

    The output of the above code is:

    Conclusion:

    In just 3 simple steps we have integrated and shown you the basic example for creating a Gradient Drawable in your android app. If you face any issue while doing this, please share it in the comment section below and we will be happy to help.

    Источник

    Полный список

    — изучаем drawable-тег shape

    Подробно ознакомившись с 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

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

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

    В 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 теги: , ,

    Присоединяйтесь к нам в Telegram:

    — в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

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

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

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

    Источник

    Читайте также:  Андроид озвучивает все действия как отключить
    Оцените статью
    Attributes Description
    android:startColor