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

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

Войти
Регистрация
Восстановить пароль
 
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
#1

Ресайз фигуры - Android

12.09.2013, 11:57. Просмотров 389. Ответов 5
Метки нет (Все метки)

Есть фигура. Квадрат. Отображаю при помощи Path. Path составляю из массива точек.
При пинче хочу ресайзить фигуру (делать крупнее, мельче).
Как ресайзю сейчас: для каждой точек квадрата (а их четыре) сечу новые X+Y, их вычисляю обычным способом.

Проблема: При таком ресайзе фигура уезжает, то есть поскольку x и y все точек увеличивается/уменьшается фигура уезжает.

Вопрос: Как надо?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2013, 11:57     Ресайз фигуры
Посмотрите здесь:

ресайз CDialog Visual C++
Ресайз картинок PHP
Определение граний произвольной закрытой фигуры Android
PHP Ресайз
OpenGL Перемещение и ресайз изображения
progressbar в виде фигуры человечка Android
Ресайз изображений HTML, CSS
ресайз фоновых изображений HTML, CSS
Ресайз картинок PHP
Движение геометрической фигуры Android
PHP Ресайз изображения
Ресайз канваса HTML5 Canvas

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
3024 / 1826 / 190
Регистрация: 13.01.2012
Сообщений: 6,929
12.09.2013, 12:32     Ресайз фигуры #2
Цитата Сообщение от haribo Посмотреть сообщение
их вычисляю обычным способом
интересно каким? по идее надо, например, так: левый верхний угол фигуры остается неподвижным, тогда: координаты трех оставшихся точек вычисляются как текущее расстояние от них до опорной точки по соответвующе оси умноженное на масштабный коэффициент.
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
12.09.2013, 14:16  [ТС]     Ресайз фигуры #3
Цитата Сообщение от vxg Посмотреть сообщение
интересно каким? по идее надо, например, так: левый верхний угол фигуры остается неподвижным, тогда: координаты трех оставшихся точек вычисляются как текущее расстояние от них до опорной точки по соответвующе оси умноженное на масштабный коэффициент.
Именно так, только левый верхний угол тоже вычисляется. Если его не вычислять, то точки разъезжаются по какой-то причине и это уже не квадрат.
Плюс ко всему, назрел еще один вопрос, почему-то ресайз ОЧЕНЬ быстрый, малеший pinch дает огромный ресайз.

Ресайз вычисляю следующим образом:
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
@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction() & MotionEvent.ACTION_MASK) {
        ...
        case MotionEvent.ACTION_MOVE: {
                ...
                float newMovingDist = spacing(event);
                if (newMovingDist > stdDist) {
                        for (FigurePoint point : pointList) {
                            point.setX((int) (newMovingDist / movingDist * point.getX()));
                            point.setY((int) (newMovingDist / movingDist * point.getY()));
                        }
                        invalidate();
                }
}
 
private float spacing(MotionEvent event) {
    float x = 0;
    float y = 0;
    try {
        x = event.getX(0) - event.getX(1);
        y = event.getY(0) - event.getY(1);
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
        Log.d(TAG, "pointerIndex exception");
    }
    return FloatMath.sqrt(x * x + y * y);
}
pointsList - содержит точки фигуры (квадрат, треугольник)
vxg
Модератор
3024 / 1826 / 190
Регистрация: 13.01.2012
Сообщений: 6,929
12.09.2013, 14:44     Ресайз фигуры #4
Цитата Сообщение от haribo Посмотреть сообщение
по какой-то причине
надо полагать они едут от того что левый верхний угол имеет координаты отличные от 0,0 - нельзя координаты тупо умножать на масштабирующий коэффициент. новая координата должна быть вычислена как
x_new = x_base + (x_old - x_base) * k;
то же самое для y
базовую точку выбирайте любую - будет казаться что фигура меняет размер будучи закрепленной за эту точку. что бы размер изменялся не слишком быстро подберите k. как его получить по прикосновению - отдельная тема. я не разу с прикосновением не работал. если вы про тот вид когда человек сводит/разводит два пальца, то наверное надо получать отношение между исходной и текущей дистанцией. причем перезаписывать координаты фигуры только после того как пользователь отпустил. иначе она лавинообразно увеличится/уменьшится
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
12.09.2013, 18:01  [ТС]     Ресайз фигуры #5
del

Добавлено через 16 минут
Цитата Сообщение от vxg Посмотреть сообщение
иначе она лавинообразно увеличится/уменьшится
именно так и нужно, уменьшение/увеличение не после отпускания пальцев, а во время пинча.
Если что, могу рассказать как это делается (код представлен выше)
vxg
Модератор
3024 / 1826 / 190
Регистрация: 13.01.2012
Сообщений: 6,929
12.09.2013, 19:10     Ресайз фигуры #6
лучше расскажите)
Yandex
Объявления
12.09.2013, 19:10     Ресайз фигуры
Ответ Создать тему
Опции темы

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