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

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

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

Ресайз фигуры - Программирование Android

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

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

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

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

Вращение фигуры в SurfaceView - Программирование Android
Сейчас фигура вращается с помощью функции glRotate, все работает, и она вращается при запуске. Как сделать, чтобы фигура вращалась не...

Движение геометрической фигуры - Программирование Android
Прошу помочь Нужно реализовать движение по экрану геометрической фигуры в каком-либо направлении, например круга, так чтобы это было...

ProgressBar в виде фигуры человечка - Программирование Android
Здравствуйте. Подскажите как реализовать такой progressbar. Спасибо.

Определение граний произвольной закрытой фигуры - Программирование Android
При написании игры, столкнулся с проблемой. Для простоты приведу упрощенный пример. Имеем два прямоугольника частично пересекающихся между...

Ресайз - PHP
Добрый день! Есть такая проблема. Имеется скрипт, который меняет размеры изображения, но когда заливаешь довольно крупную пикчу...

Ресайз канваса - HTML5 Canvas
Столкнулся с такой проблемой: Загружаю в канвас изображение; Теперь, если задавать ширину/высоту канваса через свойства тега width и...

Ресайз изображения - PHP
Есть изображение, такого вида: увеличиваю(делаю ресайз) его в 2 раза в paint.net-e .превращаю в такой вид: видимо imagecopyresampled и...

Ресайз картинок - PHP
На сайте выводятся картинки уменьшенного размера как я понял они как то уменьшаются, вот код который выводит картинки <?php ...

ресайз CDialog - Visual C++
Привет, народ! Помогите новичку. Работаю с CDialog. Нужно чтобы окно могло растягиваться. Как программно добавить такое свойство?

Ресайз картинок - PHP
Привет! Можно ли средствами РНР изменять размеры картинок как есть, т.е., - не срезая, не растягивая и не сжимая? Напр., есть...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
3120 / 1922 / 208
Регистрация: 13.01.2012
Сообщений: 7,359
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
Модератор
3120 / 1922 / 208
Регистрация: 13.01.2012
Сообщений: 7,359
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
Модератор
3120 / 1922 / 208
Регистрация: 13.01.2012
Сообщений: 7,359
12.09.2013, 19:10     Ресайз фигуры #6
лучше расскажите)
Yandex
Объявления
12.09.2013, 19:10     Ресайз фигуры
Ответ Создать тему
Опции темы

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