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

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

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

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

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

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

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

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

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

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

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

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

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

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

5
vxg
Модератор
3188 / 1991 / 228
Регистрация: 13.01.2012
Сообщений: 7,714
12.09.2013, 12:32 #2
Цитата Сообщение от haribo Посмотреть сообщение
их вычисляю обычным способом
интересно каким? по идее надо, например, так: левый верхний угол фигуры остается неподвижным, тогда: координаты трех оставшихся точек вычисляются как текущее расстояние от них до опорной точки по соответвующе оси умноженное на масштабный коэффициент.
1
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 - содержит точки фигуры (квадрат, треугольник)
0
vxg
Модератор
3188 / 1991 / 228
Регистрация: 13.01.2012
Сообщений: 7,714
12.09.2013, 14:44 #4
Цитата Сообщение от haribo Посмотреть сообщение
по какой-то причине
надо полагать они едут от того что левый верхний угол имеет координаты отличные от 0,0 - нельзя координаты тупо умножать на масштабирующий коэффициент. новая координата должна быть вычислена как
x_new = x_base + (x_old - x_base) * k;
то же самое для y
базовую точку выбирайте любую - будет казаться что фигура меняет размер будучи закрепленной за эту точку. что бы размер изменялся не слишком быстро подберите k. как его получить по прикосновению - отдельная тема. я не разу с прикосновением не работал. если вы про тот вид когда человек сводит/разводит два пальца, то наверное надо получать отношение между исходной и текущей дистанцией. причем перезаписывать координаты фигуры только после того как пользователь отпустил. иначе она лавинообразно увеличится/уменьшится
1
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
12.09.2013, 18:01  [ТС] #5
del

Добавлено через 16 минут
Цитата Сообщение от vxg Посмотреть сообщение
иначе она лавинообразно увеличится/уменьшится
именно так и нужно, уменьшение/увеличение не после отпускания пальцев, а во время пинча.
Если что, могу рассказать как это делается (код представлен выше)
0
vxg
Модератор
3188 / 1991 / 228
Регистрация: 13.01.2012
Сообщений: 7,714
12.09.2013, 19:10 #6
лучше расскажите)
0
12.09.2013, 19:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2013, 19:10
Привет! Вот еще темы с ответами:

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

Ресайз изображений - HTML, CSS
Здравствуйте, изложу суть вопроса. Нужно менять размеры изображения так чтобы пропорции не менялись, проблема в том что изображения, в...

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

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


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

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

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