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

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

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

Как получить списк координат Path? - Программирование Android

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

Добрый день.
Есть проблема как получить координаты Canvas Path после преобразований matrix.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2015, 08:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как получить списк координат Path? (Программирование Android):

Как распарсить svg path и по нему нарисовать во View кривую - Программирование Android
Нужно написать приложение которое на входе принимает svg path, к примеру...

Как получить весь URL path и загрузить его в код? - Java Сети
Привет Уважаемые форумчане. Пытаюсь построить свой HTTPSERVER и застрял на самом важном, никак не могу загрузить URL в код. ...

Сокращение пути к файлу, x:\path\path\...\path - Delphi
Помогите с решением такой задачи, желательно до четверга)): Строка длиной не более 1000 символов содержит полный путь к файлу в формате...

Qt file path - не удается получить путь к файлу - C++ Qt
QModelIndex index = ui->treeView->currentIndex(); QFileSystemModel fileModel; name = fileModel.filePath(index); Вылетает при...

Можно ли как-то из координат всех частиц Ci получить (сконструировать) симметричную матрицу - Численные методы
- Граждане математики, помогите пожалуйста физику! Есть такая задача: На плоскости имеется облако, состоящее из N - точечных частиц Ci с...

The path you have specified (D:\Program Files) is invalid. The Oracle Home path may not contain spaces. - Oracle
Возникла проблема с установкой Oracle9i Database 9.0.1.1.1 ОС: Windows XP Professional SP3 Запускаю установщик, окно расположение...

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

Вот тут можно глянуть таблицу соответствия версий Android и его API.
http://developer.android.com/guide/t...html#ApiLevels
0
zuevmail
0 / 0 / 0
Регистрация: 20.12.2011
Сообщений: 57
07.12.2015, 11:25  [ТС] #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);
0
FireOwl
62 / 44 / 5
Регистрация: 01.07.2009
Сообщений: 145
07.12.2015, 16:33 #8
Тут я уже в тупике. С Xamarin работал немного, ничего не знаю о его причудах.
Попробуйте убрать алиасинг. Или убрать условие
C#
1
if (_fillPaint == null)
на случай если каким-то образом _fillPaint инициализируется не тем чем должен.
0
zuevmail
0 / 0 / 0
Регистрация: 20.12.2011
Сообщений: 57
07.12.2015, 18:29  [ТС] #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);
0
07.12.2015, 18:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.12.2015, 18:29
Привет! Вот еще темы с ответами:

[WPF] "Path" является неоднозначной ссылкой между "System.Windows.Shapes.Path" и "System.IO.Path" - C# WPF
Здравствуйте! Делаю экспорт из программы в Excel. Код брался от WinForm, немного переписал. Задача была следующей: взять запись из...

односвязный списк - C++
написать прогу,которая из последовательности целых чисел формирует односвязный список!организовать след.действия с ним:все элементы списка...

Списк: однонаправленный список - C++
Друзья, кто может, помогите программку написать, надо чтоб состояло из нескольких файлов (.h, .cpp), вот задание, кто сделает буду очень...

Организовать список объектов и сортировку списк - C++
Помогите пожалуйста написать программу.Вот само задание: Организовать список объектов и сортировку списка. Данные списка вводятся с...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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