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

нарисовать многоугольник - Android

Войти
Регистрация
Восстановить пароль
 
serjekat
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 24
18.02.2016, 08:56     нарисовать многоугольник #1
Подскажите пожалуйста новичку! Как нарисовать многоугольник напрямую на canvas? Например 8 вершин: начинаем с точки(вершину) (А), потом ставим точку(В) точки А и В соединяются прямой, и т.д и т.п последняя точка замыкается с точкой А. При нажатии на стороны полученной фигуры вводится размер. Затем рассчитать площадь полученной фигуры зная или углы или диагонали. Может кто то сталкивался!? В каком направлении искать, читать, учить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
18.02.2016, 10:34     нарисовать многоугольник #2
Нарисовать просто
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//Находим все точки
PointF pointA = ...
PointF pointB = ...
...
 
Path path = new Path();
path.moveTo(pointA.x, pointA.y);
path.lineTo(pointB.x, pointB.y);
path.lineTo(pointC.x, pointC.y);
....
path.close();//Закрывает фигуру от последней точки к первой.
 
//Создаем Paint
Paint paint = new Paint();
//Настраиваем его по вкусу
 
canvas.drawPath(path, paint);
Все инициализации нужно вынести из onDraw() т.к. на выделение памяти уходит много времени. Т.е. все точки, path, paint должны быть инициализированы уже в onCreate(), а в onDraw() только задавать им параметры.

С нажатием уже сложнее нужно повесить на вьюшку onTouchListener и в нем при нажатии искать какая грань нажата, возможно даже лучше рисовать в таком случае не Path, а линиями, чтобы их было легко подсветить и т.п.
serjekat
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 24
18.02.2016, 11:45  [ТС]     нарисовать многоугольник #3
Можно пожалуйста чуть подробнее. Спасибо
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
18.02.2016, 11:48     нарисовать многоугольник #4
serjekat, что именно подробнее?
Паблито
18.02.2016, 11:59
  #5

Не по теме:

очевидно ведь
надо полностью готовый код - самодостаточный метод или кастомный класс и подробная инструкция, а он потом вероятно даже не зайдет в тему или на форум чтобы отписаться

CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
18.02.2016, 12:10     нарисовать многоугольник #6
Цитата Сообщение от serjekat Посмотреть сообщение
Можно пожалуйста чуть подробнее. Спасибо
Использовал ответы отсюда: http://stackoverflow.com/questions/2...filled-polygon.
А для того чтобы нарисовать на канве, почитайте что-нибудь с нуля, например, http://android-er.blogspot.ru/2014/0...canvas-of.html.
serjekat
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 24
18.02.2016, 12:30  [ТС]     нарисовать многоугольник #7
Готовый код это хорошо, но хочется разобраться во всем этом. Только начал. Смотрю читаю уроки и т.д и т.п.ю Спасибо за ссылки обязательно буду изучать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2016, 11:36     нарисовать многоугольник
Еще ссылки по теме:

Нарисовать на канвасе цветной текст Android
Как нарисовать анимированную линию Android
Нарисовать маршрут на карте гугл Android
Нарисовать текст drawTextOnPath горизонтально Android
Android Как можно нарисовать многоугольник

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

Или воспользуйтесь поиском по форуму:
serjekat
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 24
21.03.2016, 11:36  [ТС]     нарисовать многоугольник #8
Нарисовать многоугольник получилось, а как каждой вершине задать "Имя" ил номер!?
Java
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
41
42
43
44
45
46
47
48
@Override
    public boolean onTouchEvent(MotionEvent event) {
 
 
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    if (i == 0) {
                        startX = event.getX();
                        startY = event.getY();
 
                        x[i] = startX;
                        y[k] = startY;
                        path.moveTo(x[i], y[k]);
                        path.addCircle(x[i], y[k], 20, Path.Direction.CCW);
 
                    } else {
                        x[i] = event.getX();
                        y[k] = event.getY();
                        moveY = y[i];
                        moveX = x[k];
 
                        if (startX > moveX - Rad &&
                                startX < moveX + Rad &&
                                startY > moveY - Rad &&
                                startY < moveY + Rad) {
                            path.lineTo(startX, startY);
                            path.close();
                            invalidate();
 
                            return false;
 
                        } else {
                            path.lineTo(x[i], y[k]);
 
                            path.addCircle(x[i], y[k], 15, Path.Direction.CCW);
                        }
                    }
 
                    i++;
                    k++;
            }
 
        }
 
        invalidate();
        return true;
    }
Yandex
Объявления
21.03.2016, 11:36     нарисовать многоугольник
Ответ Создать тему
Опции темы

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