Android studio пунктирная линия

Класс Path

Класс android.graphics.Path (контур) позволяет создавать прямые, кривые, узоры и прочие линии. Готовый путь затем можно вывести на экран при помощи метода canvas.drawPath(path, paint).

Рассмотрим базовый пример с применением некоторых методов класса.

Создадим новый класс, наследующий от View:

Подключим его к главной активности, чтобы вывести на экран:

Методы

Метод reset() очищает объект Path.

Метод moveTo() ставит кисть в указанную точку, с которой пойдёт новая линия.

Метод lineTo() рисует линию от текущей точки до указанной, следующее рисование пойдёт уже от указанной точки.

Метод close() закрывает контур.

Методы addRect(), addCircle() добавляю к контуру прямоугольник и окружность. В методах используется параметр, отвечающий за направление. Есть два варианта: Path.Direction.CW (по часовой) и Path.Direction.CCW (против часовой).

Метод cubicTo() рисует кубическую кривую Безье. По аналогии можете изучить другие методы.

Методы moveTo(), lineTo(), quadTo(), cubicTo() имеют методы-двойники, начинающиеся с буквы r (relative): rMoveTo(), rLineTo(), rQuadTo(), rCubicTo(). Данные методы используют не абсолютные, а относительные координаты.

Спроектируем лестницу при помощи метода lineTo().

Проверяем, удобно ли спускаться. Теория — это одно, а практика — это совсем другое.

Эффекты

Контурные эффекты используются для управления отрисовкой контура. Они чрезвычайно полезны для рисования контурных графических примитивов, но могут быть применены к любому объекту Paint, чтобы повлиять на способ отрисовки их очертаний.

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

  • CornerPathEffect. Позволяет сглаживать острые углы в форме графического примитива, заменяя их на закругленные.
  • DashPathEffect. Вместо рисования сплошного контура можете использовать DashPathEffect для создания очертания, состоящего из ломаных линий (тире/точек). Есть возможность указать любой шаблон повторения сплошных/пустых отрезков.
  • DiscretePathEffect. Делает то же самое, что и DashPathEffect, но добавляет элемент случайности. Указываются длина каждого отрезка и степень отклонения от оригинального контура.
  • PathDashPathEffect. Позволяет определить новую фигуру (контур), чтобы использовать ее в виде отпечатка оригинального контура.
  • SumPathEffect. Добавляет последовательность из двух эффектов, каждый из которых применяется к оригинальному контуру, после чего результаты смешиваются;
  • ComposePathEffect. Использует первый эффект, затем к полученному результату добавляет второй.

Контурные эффекты, влияющие на форму объекта, который должен быть нарисован, изменяют и область, занимаемую им. Благодаря этому любые эффекты для закрашивания, применяемые к данной фигуре, отрисовываются в новых границах.

Контурные эффекты применяются к объекту Paint с помощью метода setPathEffect()

DashPathEffect

Сплошную линию можно сделать пунктирной с помощью класса DashPathEffect. Перепишем немного код.

Вам нужно указать длину отрезка для пунктира и длину отрезка для разрыва между двумя отрезками пунктира. Эта комбинация будет циклично использована для прорисовки всей линии. Пунктирная линия может быть сложной. Задайте массив для переменной intervals, чтобы увидеть разницу.

Читайте также:  Pattern lock android locked

Упрощённый вариант для Kotlin с применением Bitmap в ImageView.

Вместо точек можно вывести пунктирную линию, исправив одну строчку кода.

CornerPathEffect

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

PathDashPathEffect

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

Бегущие муравьи

Вы все встречали эффект «бегущие муравьи» в графических редакторах. Применим его к объекту класса PathDashPathEffect, увеличивая смещение.

На странице Effect of advance, phase, style in PathDashPathEffect автор примера поиграл с параметрами.

DiscretePathEffect

DiscretePathEffect позволяет «сломать» прямую линию, чтобы получить ломаную с элементом случайности. Полученная ломанная линия будет состоять из отдельных отрезков. Мы можем воздействовать на длину и степень излома.

Показать код (ткните лапой)

SumPathEffect

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

Суммируем эффекты CornerPathEffect и DashPathEffect. Для наглядности я чуть изменил параметры у эффектов, чтобы было виден результат наложения двух эффектов на лестницу — вы должны увидеть две линии — прерывистую и скруглённую.

Показать код (щелкните мышкой)

ComposePathEffect

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

Заменим класс SumPathEffect на ComposePathEffect из предыдущего примера и посмотрим на результат.

Пример

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

Примеры с контурами

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

В класс PathView внесём изменения.

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

Запустив проект, вы можете с помощью ползунка менять размеры контура, который в данной реализации является окружностью.

Усложним пример. Будем использовать не только окружность, но и другие фигуры. Добавим в класс Shape метод setPolygon():

Класс PathView потребует небольшой переделки.

В разметке до компонента PathView добавьте пару новых компонентов.

Код для активности.

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

Следующий этап — создание звёзд, пятиконечной, шестиконечной и т.д.

Опять добавим код в класс Shape.

Внесём изменения в класс PathView.

Чтобы закруглить углы у звёзд, применим эффект CornerPathEffect. Добавим код в конструктор класса Shape.

Чтобы залить фигуру цветом, нужно использовать вместо стиля Paint.Style.STROKE стиль Paint.Style.FILL или Paint.Style.FILL_AND_STROKE.

Читайте также:  Обучение программированию с нуля для андроид

Вращение

Чтобы вращать контур, нужно создать объект класса Matrix и вызвать метод postRotate().

Добавим в класс PathView две новых переменных.

Добавим строчку кода в метод init():

Добавим код в onDraw():

Добавим новый метод.

Добавим в разметку активности ещё один SeekBar

И добавляем код в класс активности:

Вращать можно не только сам контур, но и холст вместо него. Эффект будет такой же, а по потреблению ресурсов даже может оказаться эффективнее. Закоментируем использование класса Matrix и добавим вызов метода Canvas.rotate() в методе onDraw() класса PathView.

Теперь создадим эффект «бегущих муравьёв» при помощи PathDashPathEffect:

Источник

Как сделать пунктирную / пунктирную линию в Android?

Я пытаюсь сделать пунктирную линию. Я использую это прямо сейчас для сплошной линии:

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

14 ответов:

эффект пути устанавливается на объект paint

вы можете создавать всевозможные пунктирные узоры, предоставляя больше чисел в массиве int [], который определяет отношения тире и зазора. Это простая, одинаково пунктирная линия.

Это поможет вам. Создание пунктирной линии с помощью XML. Создайте xml в папке drawable и дайте этот фон элементу, для которого вы хотите установить пунктирную границу.

— — — — > создание XML фона «dashed_border»

— — — — — > добавление этого фона к элементу

установить в качестве фона вашего вида:

что я сделал, когда я хотел нарисовать пунктирную линию, чтобы определить drawable dash_line.xml:

а затем в макете просто определить вид с фоном как dash_line. Примечание для включения android: layerType= «программное обеспечение», в противном случае это не будет работать.

У меня есть пользовательский пунктир, который поддерживает горизонтальную и вертикальную пунктирную линию . код ниже:

Источник

Создание горизонтальных и вертикальных пунктирных линий в android

Я хочу рисовать горизонтальные и вертикальные пунктирные линии в андроиде, используя фигуры.

Я хочу рисовать вот так

Для горизонтальной линии

Для вертикальной линии

Но вертикальная пунктирная линия, не отображающая мой вывод, выглядит так:

Как нарисовать вертикальную линию.

ОТВЕТЫ

Ответ 1

Я нашел решение

Ответ 2

Я думаю, что я нашел «более чистое» решение для этой проблемы, создав пользовательский вид, содержащий конкретный код для рисования пунктирных линий (как в вертикальной, так и в горизонтальной ориентации), и множество атрибутов, чтобы сделать его очень легким используйте его из макетов XML. Основное преимущество этого подхода по методу «повернутой линии» заключается в том, что вы можете установить размер пунктирной линии так, как вы обычно делаете, не беспокоясь о том, как будет выглядеть представление после вращения (после вращение применяется ко всему изображению пунктирной линии, а не только к линии, нарисованной).

Итак, вот пошаговое решение:

Читайте также:  Восстановление удаленных файлов с андроида без рут прав

Создайте файл «/res/values/attrs.xml» со ​​следующим содержимым:

Это создает атрибуты для управления настраиваемым представлением. Примечание. Если файл выше уже существует в вашем проекте, просто скопируйте/вставьте блок «declare-stylable» внутри существующего блока «resources».

Создайте класс DividerView и вставьте содержимое ниже:

Чтобы использовать автоматическое заполнение атрибутов в файлах макета, добавьте следующее имя определение пространства в самом верхнем контейнере:

Замените com.example именем вашего пакета. Вы также можете изменить custom на любой префикс, который лучше соответствует вашим потребностям. Примечание. Возможно, вам придется перезапустить Eclipse, чтобы автоматически завершить работу после изменений в файле attrs.xml.

И, наконец, создайте свои пунктирные линии, вставив следующие элемент на вашем макете, как и любой другой вид:

Надеюсь, это поможет!

Ответ 3

Если View имеет ширину 1dp, то просто поворачивать горизонтальную линию недостаточно. Длина вертикальных линий будет 1dp, поскольку она сначала будет выведена горизонтально, а затем повернута. Вот трюк для решения этой проблемы:

Ответ 4

Это работает для меня:

Ответ 5

Это хорошо решает проблему. Создайте line_dash.xml

Используйте это так

Ответ 6

Ключом к приведенному выше коду для работы является использование android:layerType=»software» . Для получения дополнительной информации, проверьте эту ссылку.

Ответ 7

Это решение работает на 100% и желает помочь вам:

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

если вы хотите иметь вертикальную пунктирную линию, вы должны повернуть этот чертеж следующим образом:

Теперь у вас есть горизонтальная и вертикальная пунктирная линия.

Источник

Как сделать пунктирную/пунктирную линию в Android?

Я пытаюсь сделать пунктирную линию. Я использую это прямо сейчас для сплошной линии:

Мне нужно что-то подобное, но точнее, а не сплошное. Я бы хотел избежать сотен макетов, чередующихся между прозрачным макетом и сплошным макетом.

Эффект пути задается на объекте paint

вы можете создавать всевозможные точечные шаблоны, предоставляя больше чисел в массиве int [], в котором указаны отношения тире и пробела. Это простая, равномерно пунктирная строка.

Это поможет вам.
Создание пунктирной линии с использованием XML.
Создайте xml в выделенной папке и дайте этот фон тому элементу, которому вы хотите установить пунктирную рамку.

—- > Создание фона XML «dashed_border»

—— > Добавление этого фона в элемент

Создайте xml (view_line_dotted.xml):

Установите в качестве фона своего вида:

То, что я сделал, когда я хотел нарисовать пунктирную линию, — это определить растягиваемый dash_line.xml:

И затем в макете просто определите представление с фоном как dash_line. Примечание: android: layerType = «software» , иначе это не сработает.

У меня есть тарелка, которая поддерживает горизонтальную и вертикальную штриховую линию. код ниже:

Используя этот класс, вы можете применить эффект «пунктирный и подчеркивающий» к тексту нескольких строк. для использования DashPathEffect вы должны отключить hardwareAccelerated вашего TextView (хотя метод DashPathEffect имеет проблему с длинным текстом). вы можете найти мой пример проекта здесь: https://github.com/jintoga/Dashed-Underlined-TextView/blob/master/Untitled.png.

Я использовал ниже в качестве фона для макета:

Источник

Оцените статью