Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
zuevmail
0 / 0 / 0
Регистрация: 20.12.2011
Сообщений: 50
#1

Как получить списк координат Path? - Android

04.12.2015, 08:05. Просмотров 280. Ответов 8
Метки нет (Все метки)

Добрый день.
Есть проблема как получить координаты Canvas Path после преобразований matrix.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
FireOwl
62 / 44 / 5
Регистрация: 01.07.2009
Сообщений: 145
04.12.2015, 13:24     Как получить списк координат Path? #2
У объекта Path нет public методов, возвращающих массив его точек. (Т.к. объект может быть сложным и включать в себя не только ломаные линии, но и дуги / сплайны).
На ум приходит два способа:
1) Записывать все точки добавленные в Path, и применять к ним матрицы, примененные к Path. Таким образом массив точек будет всегда соответствовать тому пути что содержится в объекте Path.
Реализуется через линейную алгебру.
2) Создать объект PathMeasure. Воспользоваться его методом getPosTan и "пробежать" с некоторым шагом требуемый Path. В результате можно получить массив точек, которые с некоторой точностью (обратно пропорциональной величине шага) описывают указанный Path.
zuevmail
0 / 0 / 0
Регистрация: 20.12.2011
Сообщений: 50
04.12.2015, 14:35  [ТС]     Как получить списк координат Path? #3
Спасибо. Тоже думал над линейной алгеброй, если в андройде готовая библиотека или что то надо тащить, я на xamarin делаю?
FireOwl
62 / 44 / 5
Регистрация: 01.07.2009
Сообщений: 145
04.12.2015, 18:28     Как получить списк координат Path? #4
Полагаю можно не изобретать велосипед, а взять стандартный метод класса Matrix - MapPoints. Применяет матрицу к массиву точек. Результат пишет в тот же массив, или любой другой указанный.
Таким образом можно будет использовать на массиве точек те же самые матрицы, что и на объекте Path.
zuevmail
0 / 0 / 0
Регистрация: 20.12.2011
Сообщений: 50
07.12.2015, 08:11  [ТС]     Как получить списк координат Path? #5
Возникла еще проблема. Пытаюсь залить контур цветом. На виртуальном устройстве заливка работает, а на реальном Lenovo K900 заливки нет. Что может быть?
FireOwl
62 / 44 / 5
Регистрация: 01.07.2009
Сообщений: 145
07.12.2015, 08:52     Как получить списк координат Path? #6
Как именно заливаете?
В Андроид многие теги или операторы доступны только начиная с определенной версии Android API.
Проверьте версию Андроид на реальном телефоне, и попробуйте программу на эмуляторе с такой же версией.

Вот тут можно глянуть таблицу соответствия версий Android и его API.
http://developer.android.com/guide/t...html#ApiLevels
zuevmail
0 / 0 / 0
Регистрация: 20.12.2011
Сообщений: 50
07.12.2015, 11:25  [ТС]     Как получить списк координат Path? #7
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public static class  PaintFactory
    {
        public static Paint CreatePaint(Graphic name)
        {
            Paint res;
            switch (name)
            {
                case Graphic.Contour:
                    res = new Paint {StrokeWidth = 15};
                    res.SetStyle(Paint.Style.Stroke);
                    res.Color = Color.RosyBrown;
                    res.AntiAlias = true;        
                    return res;
 
                case Graphic.Fill:
                    res = new Paint();
                    res.SetStyle(Paint.Style.Fill);
                    res.Color = Color.DarkOrange;
                    res.AntiAlias = true;
                    return res;
 
                case Graphic.Point:
                    res = new Paint { StrokeWidth = 1};
                    res.SetStyle(Paint.Style.Fill);
                    res.Color = Color.Moccasin;
                    res.AntiAlias = true;
                    return res;
 
                case Graphic.TextPoint:
                    res = new Paint(PaintFlags.AntiAlias);
                    res.TextSize = 50;
                    res.SetStyle(Paint.Style.Stroke);
                    res.Color = Color.Black;
                    return res;
            }
            return new Paint();
        }
 if (_fillPaint == null) _fillPaint = PaintFactory.CreatePaint(Graphic.Fill);
            //рисуем заливку
            canvas.DrawPath(new Path(_drawPath), _fillPaint);
FireOwl
62 / 44 / 5
Регистрация: 01.07.2009
Сообщений: 145
07.12.2015, 16:33     Как получить списк координат Path? #8
Тут я уже в тупике. С Xamarin работал немного, ничего не знаю о его причудах.
Попробуйте убрать алиасинг. Или убрать условие
C#
1
if (_fillPaint == null)
на случай если каким-то образом _fillPaint инициализируется не тем чем должен.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.12.2015, 18:29     Как получить списк координат Path?
Еще ссылки по теме:

Как получить текст из ID Android
Как получить Google Advertising ID? Android
Android Как получить из ListArray индекс?
Android CustomView разные изображения для разных экранов - одна система координат - Как?
Android Как получить текущий месяц?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
zuevmail
0 / 0 / 0
Регистрация: 20.12.2011
Сообщений: 50
07.12.2015, 18:29  [ТС]     Как получить списк координат Path? #9
Это у меня идет инициализация при первом обращении.
Нашел проблему. У меня было два Path один для контура другой для заливки. Один создавался через другой.
C#
1
 canvas.DrawPath(new Path(_drawPath), _fillPaint);
Создал каждый отдельно и все заработало
C#
1
2
3
4
5
_sourcePoint.AddPoints(points);
            _drawPath = PaintFactory.CreatePath(Graphic.Test);
            _sourcePoint.FillPath(_drawPath);
            _fillPath = PaintFactory.CreatePath(Graphic.Test);
            _sourcePoint.FillPath(_fillPath);
Yandex
Объявления
07.12.2015, 18:29     Как получить списк координат Path?
Ответ Создать тему
Опции темы

Текущее время: 20:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru